第1页:第四部分创建型设计模式封面
第四部分创建型设计模式
第2页:创建型设计模式的内容导览
简单工厂模式(Simple Factory Pattern)
- 工厂模式(Factory Method Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单件模式(Singleton Pattern)
- 构造器模式(Builder Pattern)
- 原型模式(Prototype Pattern)
第3页:
第4页:简单工厂模式的适用性与不足
不足
- 使用者与产品紧耦合;
- 产品的创建与使用,采用硬编码;
- 难以适应产品的变化,对开闭原则的支持不好
- 扩展产品子类
- 扩展产品族
- 产品的组装方式变化
- 产品的构建算法
第5页:简单工厂模式的定义与结构
4.1简单工厂模式
第6页:
第7页:简单工厂模式示例一:未封装对象的创建
例1
第8页:
第9页:简单工厂模式示例二:工厂构造对象
例2:Java中DateFormat
- DateFormat类中的部分代码:public final static DateFormat getInstance();public final static DateFormat getInstance(int style);public final static DateFormat getInstance(int style, Local loc);例:Date date = new Date();String strDate = DateFormat.getInstance().Format(date);
第10页:工厂方法模式的动机与问题
4.2工厂模式(Factory Method Pattern)
- 简单工厂方法的不足
- 要求工厂是全能型的
- 不能体现产品的层次性(产品等同化了)
- 扩展产品时,部分支持开闭原则
第11页:工厂方法模式的解决思路
工厂方法模式解决方法
第12页:工厂方法模式的结构
工厂方法模式结构
第13页:工厂方法模式的补充说明
工厂方法模式说明
- 目的:定义一个创建产品的接口,而由该接口的子类决定具体实例化哪种产品。将产品的实例化延迟到接口的子类中。
- 优点
- 扩展产品时,完全支持开闭原则;
- 新增子类产品
- 新增产品树
- 用同构的产品树替换原有产品树
- 具有对应的层次结构,Client只通过产品的抽象接口交互,不必明确知道具体的产品
- 不足
- 子类数量可能较多
第14页:工厂方法模式的选择与类模版参数化
关于实现
- 使用简单工厂方法模式
- 产品结构简单时,特别对于兄弟产品
- 使用工厂方法模式
- 产品结构较复杂时,特别是具有多层次结构的产品树
- 必要时可使用类模版减少子类数量
第15页:类模版参数化工厂的示例代码
template <class TheProduct>
- class MyCreator:public Creator
- {
- public:
virtual Product * CreateProduct(); }; template <class TheProduct> Product * MyCreator<TheProduct>::CreateProduct( ) { return new TheProduct; }
第16页:抽象工厂模式的提出背景
4.3抽象工厂方法具有相同结构层次的产品树
第17页:产品对象间的相关性
可使用工厂方法实现
第18页:产品族结构说明
上例中的特性
- 两个产品树,具有相同的结构
- 所有产品,可分为多个系列(基础英语,专业英语,软件工程三个系列)
- Client(学生)只能同时使用同一系列中的产品(学习基础英语,只能使用公外英语教师;学习基础英语,只能使用专业英语教师;学习软件工程,只能使用专业课程教师)
第19页:
第20页:抽象工厂模式的结构
抽象工厂结构
第21页:抽象工厂模式的说明与对比
抽象工厂模式说明
- 适应性
- 存在多个产品族(系列),客户只消费其中某一族产品;
- 需要在设计时,体现上述特性
- 优点
- 容易更换产品系列
- 限制客户跨系列消费产品;
- 不足
- 难以添加新种类产品