详解23种设计模式——工厂模式

工厂模式 | CoderMast编程桅杆工厂模式 设计思想 工厂模式是最常用的设计模式之一,属于创建型模式,将创建对象的权利交给了一个工厂类,从而提供了一种不使用构造方法的情况下创建对象的途径,无需指定要创建的具体类,将创建对象的过程进行封装,通过提供的通用接口和一组实现类,隐藏了具体的对象实例化细节,使得实际对象创建的逻辑与使用该对象的逻辑分离,降低了程序的耦合度,实现解耦。 注意 需要注...https://www.codermast.com/dev-idea/design-patterns/create-patterns/factory-pattern.html#

设计思想

工厂模式是最常用的设计模式之一,属于创建型模式,将创建对象的权利交给了一个工厂类,从而提供了一种不使用构造方法的情况下创建对象的途径,无需指定要创建的具体类,将创建对象的过程进行封装,通过提供的通用接口和一组实现类,隐藏了具体的对象实例化细节,使得实际对象创建的逻辑与使用该对象的逻辑分离,降低了程序的耦合度,实现解耦。

注意

需要注意的是,这里说的不使用构造方法创建对象是在业务逻辑中通过调用工厂方法来获取对象的,并不是说在工厂方法的具体实现中不使用构造方法。

使用场景

  1. 对象的创建过程复杂

如果一个对象的创建过程较为复杂,或者初始化所依赖的其他项过多,且使用较为频繁,那么就可以使用工厂模式将该对象的实例化过程进行封装,既降低了程序耦合度,也让业务逻辑更为清晰和明了。

  1. 对象的创建过程不确定

如果一个对象的创建过程不确定,在后续可能会进行修改,那么此时就可以将对象的创建过程抽离出来,从而达到修改对象的创建不会影响业务逻辑的正常执行的效果。

  1. 对象的创建需要统一管理

如果需要统一管理对象的创建过程,或者需要对创建出来的对象做统一处理,那么使用工厂模式就能够很好的完成这个需求。

  1. 对象的创建依赖不同的条件

如果需要根据不同的条件来创建不同类型的对象,那么使用工厂模式可以很方便地实现这个需求。

提示

一个工厂类中可以有多个工厂方法,一般情况下工厂类中的工厂方法都是静态的,即使用 static 关键字修饰,一般都通过类来调用,不实质化工厂对象。

实现案例

  • 简单案例

    // 形状接口
    interface Shape{
    void draw();
    }

    // 圆
    class Circle implements Shape{
    @Override
    public void draw() {
    System.out.println("画一个圆...");
    }
    }

    // 矩形
    class Rectangle implements Shape{
    @Override
    public void draw() {
    System.out.println("画一个矩形...");
    }
    }

    // 三角形
    class Triangle implements Shape{
    @Override
    public void draw() {
    System.out.println("画一个三角形...");
    }
    }

    public class ShapeFactory {
    // 1. 简单工厂模式
    public static Circle getCircle(){
    return new Circle();
    }

    复制代码
      // 2. 复杂工厂:根据名称获取
      public static Shape getShape(String type){
          if (type == null || type.equals("")){
              return null;
          }
    
          if (type.equalsIgnoreCase("circle")){
              return new Circle();
          }else if (type.equalsIgnoreCase("rectangle")){
              return new Rectangle();
          }
    
          return null;
      }

    }

  • 测试类

    // 工厂模式
    public class FactoryPattern {
    public static void main(String[] args) {
    ShapeFactory.getShape("Circle").draw();
    ShapeFactory.getShape("Rectangle").draw();
    }
    }

  • 测试结果

    画一个圆...
    画一个矩形...

相关推荐
进击的前栈13 小时前
鸿蒙实战:19 页面全景汇总与 7 大共享设计模式回顾
华为·设计模式·harmonyos
刀法如飞13 小时前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
折哥的程序人生 · 物流技术专研13 小时前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
workflower15 小时前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
折哥的程序人生 · 物流技术专研15 小时前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做
Kel15 小时前
万物皆 Runnable:LangChain 如何用一个接口统一模型、链与图
人工智能·设计模式·架构
ttod_qzstudio18 小时前
【软考设计模式】策略模式:算法族的封装与动态切换精讲
设计模式·策略模式
咖啡八杯1 天前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
ttod_qzstudio1 天前
【软考设计模式】外观模式:复杂子系统的“门面“封装与代码填空精讲
设计模式·外观模式
geovindu1 天前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式