创建型模式

简单工厂模式

工厂模式分三种

  1. 简单工厂模式
  2. 工厂方法模式
  3. 抽象工厂模式

这里介绍简单工厂模式

1:简单工厂是一种非GOF23中的设计模式,客户在使用时不需要知道具体类,只需要提供必须的信息给工厂

有些地方的解释说因为简单工厂模式太简单,所以23中设计模式就没有单独列出。但是该模式又经常使用,所以该模式同样很重要, 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。

2:核心角色
  • 抽象产品:定义了产品的规范,描述的基本的特性和功能
  • 具体产品:继承父类或实现接口的子类,第一个产品都有各自的特点
3:具体实现
3.1 抽象产品

抽象类中创建了make,写入语言各类,语言输出等方法。抽象类中的写入语言种类与语言输出VI中无具体实现方法,该方法中需要子类中重写该方法。
在这里插入图片描述
抽象类里只有make有具体实现,以便子类可以更好的继承原有功能。
在这里插入图片描述

3.2 具体产品

创建LabVIEW,Python类继承ProgrammLanguage的父类

  1. 重写父类方法 -> 写入语言种类,语言输出,make方法
    在这里插入图片描述
  • 写入语言种类
    重写该方法中直接调用父类方法
    在这里插入图片描述

  • 语言输出
    重写该方法,不同语言输出不同字符中,Labview 与Python等
    在这里插入图片描述

  • make方法
    Labview类中make方法直接调用父类方法。
    在这里插入图片描述

LABVIEW类中重写入LabVIEW方法
在这里插入图片描述

具体实现Python类

与LABVIEW类实现方法相同,不同的是写入字符串改为python

简单工厂类

创建一个专门生产类的工厂,属性中增加Languange,用来判定到底生产哪种类
在这里插入图片描述

  • 获取语言VI
    静态工厂里生产产品。
    这里根据不同的字符串,在条件框里判定创建的哪个一个类,不同的类会因为多态形成不同的方法和属性。在这里插入图片描述该VI通过输入字符串自动生成不同类,LabVIEW字符串生成LabVIEW类,Python字符串生成Python类,相同的方法因为生产的类不同,产生不同的效果。
    如果需要添加JAVA类,需要在静态工厂里添加JAVA相关的类和JAVA分支,这将导致在构造时越来越臃肿,具体的产品和工厂耦合度必然增大,这也是该模式下的劣势,优点就是难度简单易上手。
测试类

该测试类,使用枚举将不同字符串输出工厂类,生成不同的结果,输入Labview,输出我们开始学习:Labview
在这里插入图片描述
在这里插入图片描述

优点:
  1. 如果类比较少,并且不太可能发生变化,简单工厂可以减少复杂度
  2. 实现了客户端和具体实现类的解耦
缺点:
  1. 如果增加新类,会违反了OCP原则,需要在工厂类修改代码用来生成新类,否则会生成父类或者报错
选择建议:

需要快速实现且产品稳定时,适用于产品类型比较少且变化不频繁的场景使用简单工厂。
预期产品类型会频繁扩展时,选择工厂方法。
需管理多个相关联的产品时,采用抽象工厂。

实战方向
如果手上有不同厂家或者不同型号的万用表,电源,传感器模块等等,通过不同的型号创建不同的类,创建相同的API,可以在调试的时候极大的节省开发时间。
比如Tek、Aglient、Keysight的卡或者仪器可以通过枚举选择,选择生成对应的类和对应的方法。
总结

简单工厂模式通过封装对象创建过程简化客户端代码,适合小型项目或产品类型固定的场景。但其扩展性受限,在复杂系统中可考虑使用工厂方法模式或抽象工厂模式。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐