• Java23种设计模式-创建型模式之工厂方法模式


    工厂方法模式(Factory Method Pattern)
    一种创建型设计模式,它定义了一个用于创建对象接口,让子类决定将哪一个类实例化,从而将产品的实例化推迟到子类中。这种模式的主要角色包括:

    角色1:抽象工厂(Abstract Factory)。它是工厂方法模式的核心,与应用程序无关,提供了创建产品的接口
    角色2:具体工厂(Concrete Factory)。它是实现抽象工厂接口的具体工厂类,负责创建具体的产品对象。
    角色3:抽象产品(Product)。它是所有对象的超类,定义了产品的规范,描述了产品的共同主要特性和功能
    角色4:具体产品(Concrete Product)。它是实现了抽象产品角色所定义的接口的具体对象,由专门的具体工厂来创建。

    工厂方法模式优点包括:
    用户需要知道具体工厂的名称,就可以得到想要的产品无需知道产品的具体创建过程
    系统的灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
    高层模块只需知道产品抽象类,关心其他实现类,这满足了迪米特法则、依赖倒置原则和里里氏替换原则
    工厂方法模式的缺点包括:
    类的个数可能过多增加了系统的复杂度理解难度
    如果抽象产品只能生产一种产品,这可能成为一个限制。
    工厂方法模式适用于以下场景
    客户不关心创建产品的细节只关心创建产品的工厂名
    一个类通过其子类指定创建哪个产品对象
    这种模式是在简单工厂模式上改进,核心工厂类不再负责所有产品的构建,而是将具体的工作交给子类进行实现,不再接触业务相关具体细节
    示例:
    定义了一个Shape接口和实现了Shape接口的具体类Circle。然后定义一个工厂类ShapeFactory,它可以根据参数创建不同类型的Shape对象

    //定义形状接口
    public interface Shape {
        void draw();
    }
    
    //圆形类(具体产品实现)
    public class Circle implements Shape{
        @Override
        public void draw() {
            System.out.println("Circle::draw()");
        }
    }
    //工厂方法类--根据产品给对象实例化
    public class ShapeFactory {
        public static Shape getShape(String shapeType){
            if (shapeType==null){
                return null;
            }
            if (shapeType.equalsIgnoreCase("CIRCLE")){
                return new Circle();
            }
            //这里可以添加更多的形状和对应的条件判断
            return null;
        }
    }
    //测试类
    public class FactoryPatternDemo {
        public static void main(String[] args) {
            Shape circle =ShapeFactory.getShape("CIRCLE");
            if (circle!=null){
                circle.draw();
            }
            //这里可以添加更多的形状测试
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    《视觉 SLAM 十四讲》V2 第 5 讲 相机与图像
    open-set recognition(OSR)开集识别
    leetcode-aboutString
    Java中collections类常用方法介绍 (#将指定集合包装成线程同步的集合)
    Keil C251条件编译宏的应用实例
    python基础学习(7)
    keil 分散加载文件(scatter file)分析
    ELK 企业级日志分析系统
    leetcode 72. Edit Distance 编辑距离(中等)
    基于水循环优化的BP神经网络(分类应用) - 附代码
  • 原文地址:https://blog.csdn.net/csy08845/article/details/138062369