03简单工厂-工厂-抽象工厂
创建型模式
-
定义:关注对象的创建过程创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离,对用户隐藏了类的实例的创建细节
-
关注点:
- 创建什么(What)
- 由谁创建(Who)
- 何时创建(When)
-
概述:

模式
简单工厂模式
-
简单结构:3个角色
- Factory(工厂角色)
- Product(抽象产品角色)
- ConcreteProduct(具体产品角色)
-
UML图:

工厂方法模式
-
简单结构:4个角色
- Product(抽象产品)
- ConcreteProduct(具体产品)
- Factory(抽象工厂)
- ConcreteFactory(具体工厂)
-
UML图:

注意:想要实现开闭原则还需要使用[[反射机制]];spring提供了实现了方法,通过配置文件就可以实现
-
优缺点:
- 优点:
- 工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节
- 能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
- 在系统中加入新产品时,完全符合开闭原则
- 缺点:
- 系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销
- 增加了系统的抽象性和理解难度
- 优点:
-
适用环境:
- 客户端不知道它所需要的对象的类(客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体产品对象由具体工厂类创建)
- 抽象工厂类通过其子类来指定创建哪个对象
抽象工厂模式
-
定义:
- 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
- 又称为工具(Kit)模式,它是一种对象创建型模式
- 抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品
- 当一个工厂等级结构可以创建出一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率
-
简单结构:4个角色
- AbstractFactory(抽象工厂)
- ConcreteFactory(具体工厂)
- AbstractProduct(抽象产品)
- ConcreteProduct(具体产品)
-
UML图:

注意:此时在现有的工厂内添加新的产品,就不符合开闭原则
-
优缺点:
-
优点:
- 隔离了具体类的生成
- 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象
- 增加新的产品族很方便,符合开闭原则
-
缺点:
- 增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则
-
-
适用环境:
- 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节
- 系统中有多于一个的产品族,但每次只使用其中某一产品族
- 属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来
- 产品等级结构稳定

浙公网安备 33010602011771号