一、介绍:
提供一个接口以创建一系列相关或相互依赖得对象,而无需指定他们具体得类。也就是说用户在使用的过程中,通过接口创建一系列的组件,而并不需要知道哪些类实现了哪些组件。
用户只与抽象接口进行交互而不适用具体的类接口。
二、适用性
- 一个系统要独立与它的产品创建、组合和表示。
- 一个系统要由多个产品系列中的一个来配置。
- 要对一系列相关的产品对象进行创建以便联合使用。
- 提供一个产品类库,但只是想显示他们的接口而不是实现。
三、参与者
AbstractFactory
- 声明创建抽象产品的操作接口
ConcreteFactory
- 实现接口,创建具体的产品对象的操作
AbstractProduct
- 声明产品的接口
ConcentrateProduct
- 实现 AbstractProduct 接口
- 定义一个被具体工厂创建的产品对象
Client
- 使用 AbstractFactory 与 AbstractProduct 声明的接口
四、效果
- 分离了具体的类
抽象工厂模式封制了创建产品对象的过程,能够控制应用创建对象的类,实现了客户与类分类的原则。使得产品的类名在具体工厂中被隔离。
- 易于交换唱片的系列
一个具体工厂在一个应用中仅在初始化的时候得到,这使得改变一个应用的具体工厂很容易、在改变的过程中只需要改变工厂就可使用不同产品的配置
- 有利于产品的一致性
当一个系列中的产品被设计在一起工作的时候,一个应用只能能够只用同一个系列中的对象。
- 难以支持新种类的产品
抽象工厂接口确定了可以被创建产品的集合,想要增加新品种时难以扩展
五、实现
1.将工厂作为单件
2.创建产品
3.定义可拓展的工厂
1. 场景
有一个生产服装的工厂,但是服装又有裤子与衣服的区分,而男性与女性也是不一样的。而我们都知道所有的衣服各裤子都有共性,但是工厂在生产时需要在不同的车间中进行生产。
也就是,工厂总部(trouser)只需要知道每个部门名字(manTrouser、WomanTrouser)就可以,让他们创建产品(cloth),并不需要关注他们具体是怎么实现的。
2. UML 建模
3. 编码:
- 创建产品的接口
创建一个衣服的接口
创建一个裤子的接口
- 产品接口实现
男士衣服接口实现
女士衣服的接口实现
男士裤子的接口实现
女士裤子的接口实现
- 创建抽象工厂接口
- 抽象工厂实现
男士服装工厂
女士服装工厂
- 使用工厂生产
结果:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于