19暑期学习-Day11
2019-07-13 本文已影响0人
iqxtreme
(续Day10)
3 创建型模式
3.3 生成器模式(Builder)
- 之前的抽象工厂模式关注的重点是工厂和产品间的关系。而生成器模式更加关注如何创建产品(Product),即用相同的逻辑过程,创建不同的产品。
- 关键成分:导向器(Director)和生成器(Builder)
- 为获取特定的产品,客户要使用的具体的生成器。但导向器仅关心生成器接口。
-
导向器可以看成是一个生产流程的封装。给导向器提供不同的生成器就可以生产不同的产品。
导向器负责一个具体且可能非常复杂的处理逻辑,这个处理逻辑最终会提供给客户一个结果,同时,在这个处理逻辑过程中还会伴随许多复杂的生成与装配操作,因此如能分离处理逻辑和装配操作将会使得这个过程简明清晰,这可以使得导向器和生成器独立演化互不影响。 - 什么是表示代码,Director中的代码?
- 什么是构造代码,Builder中的代码?
3.3.1 生成器模式结构图
生成器模式结构图
3.3.2 生成器模式交互图
理解生成器模式,下面的交互图非常关键。
生成器模式交互图
3.3.3 生成器模式构建Maze
采用生成器模式构建Maze
上面是生成器模式构建Maze,下面是抽象工厂模式创建Maze,对比可发现Maze、Room、Door、Wall这些表示迷宫结构的类并未直接出现在构建过程中。那么日后改变那些类就不会影响目前的构建过程。
采用抽象工厂的创建过程
举例
举例1
- 定义一个GameBuilder接口,使用其中提供的方法就能搭建出一个游戏。
- GameABuilder和GameBBuilder是遵从GameBuilder接口的两个具体的游戏生成器,比如A是文字游戏,B是3D游戏。
- UnitySceneReader和UnrealSceneReader可以分别读取并分析Unity和Unreal的场景文件,并使用GameBuilder接口根据读取的场景文件构建游戏。
- 如此一来客户就有四种创建游戏的方式:
1 读取Unity场景创建GameA
2 读取Unity场景创建GameB
3 读取Unreal场景创建GameA
4 读取Unreal场景创建GameB
image.png
举例2
外语翻译,各种外语间的相互翻译。
4 工厂方法
- 工厂方法并不仅由creator本身调用。
image.png
image.png
image.png
- 与抽象工厂相比,在一个处理流程中:
1 抽象工厂通过使用配定的实例工厂直接创建产品
2 工厂方法通过使用定义好的产品创建方法来创建产品,并且产品的实际创建由子类实现。