什么是工厂模式?你以为工厂模式很简单( 二 )


文章插图
在原有类的基础上 , 定义工厂类:

什么是工厂模式?你以为工厂模式很简单

文章插图
一旦有了工厂类 , 就可以使用工厂来创建对象:
【什么是工厂模式?你以为工厂模式很简单】通过简单工厂模式 , 计算器的用户不需要知道实现加法逻辑的类的具体名称 , 只需要知道该类对应的参数“+”即可 。
简单工厂模式的问题
当我们需要添加一个计算时 , 比如平方根 。这时候我们需要先定义一个类继承类 , 实现方码 。另外 , 我们还要修改类的代码 , 增加一个case 。这显然违反了开闭原则 。可想而知 , 工厂对于新产品的加入非常被动 。
我们的例子是最简单的情况 。在实际应用中 , 产品很可能是多级树形结构 。简单的工厂可能无法正常工作 。
简单工厂模式总结
工厂类是整个简单工厂模式的关键 。它包含必要的逻辑判断 , 根据外界给出的信息来决定应该创建哪个具体的类对象 。通过使用工厂类 , 外界可以摆脱直接创建特定产品对象的尴尬局面 , 只需要负责“消费”对象即可 。不管这些对象是如何创建和组织的 。明确各自的责任和权利 , 有利于整个软件架构的优化 。
但是 , 由于工厂类集中了所有实例的创建逻辑 , 违反了高内聚责任分配原则 , 将所有的创建逻辑集中到一个工厂类中;它可以创建的类只能提前考虑 。类 , 你需要改变工厂类 。
当系统中具体的产品类别越来越多时 , 可能会要求工厂类别根据不同的情况创建不同的实例 。这种条件判断和具体产品类型的判断相互交织 , 难以避免模块功能的扩散 , 非常不利于系统的维护和扩展;
这些缺点在工厂方法模式中得到了一定程度的解决 。
3 工厂方法模式
工厂方法模式( ) 也称为工厂模式 , 也称为虚拟构造函数( ) 模式或多态工厂( ) 模式 , 属于类创建模式 。
工厂方法模式是一种面向对象的设计模式 , 它实现了“工厂”的概念 。像其他创建模式一样 , 它也处理创建对象而不指定它们的具体类型 。
工厂方法模式的本质是“定义一个用于创建对象的接口 , 但让实现该接口的类决定实例化哪个类 。工厂方法让类的实例化推迟到子类 。”
工厂方法模式使用
虽然工厂方法模式和简单工厂模式都是通过工厂创建对象 , 但它们最大的区别在于工厂方法模式在设计上完全符合“开闭原则” 。
工厂方法模式可用于以下情况:
如何实现工厂方法模式
工厂方法模式包括以下角色:
:抽象产品()
: 特定产品()
: 抽象工厂()
:()
关系图如下:
什么是工厂模式?你以为工厂模式很简单

文章插图
这里也是一个计算器的例子 。在保持 , , 等几个方法不变的情况下 , 修改简单工厂模式中的工厂类() 。要替换原来的“通用”大工厂类 , 请改用工厂方法:
什么是工厂模式?你以为工厂模式很简单

文章插图

什么是工厂模式?你以为工厂模式很简单

文章插图
这样 , 当你想在客户端进行加法操作时 , 需要如下方式:
什么是工厂模式?你以为工厂模式很简单

文章插图
至此 , 一个工厂方法模式就写好了 。