3-创建型模式
创建型模式
创建型设计模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。
主要特征:
- 第一,它们都将关于该系统使用哪些具体的类的信息封装起来。
- 第二,它们隐藏了这些类的实例是如何被创建和放在一起的。
常用的对象创建型模式有:
- 抽象工厂 Abstract Factory: 3.1-AbstractFactory「Kit」-抽象工厂-创建型模式
- 生成器 Builder
- 工厂方法 Factory Method
- 原型 Prototype
- 单例模式 Singleton
背景
游戏中的功能类
以一个地牢探索游戏创建房间为例,讨论 5 种模式。涉及的主要类有:
| |
各类创建方法比较
| |
- 硬编码方式的主要缺点是不灵活,修改迷宫的布局意味着修改这个实例方法,这容易产生错误也不易于复用
- Factory Method:CreateMaze 调用虚函数而不是构造器来创建它需要的房间、墙壁和门,那么你可以创建一个 MazeGame 的子类并重定义这些虚函数,从而改变被实例化的类。
- Abstract Factory:传递一个对象给 CreateMaze 作为参数来创建房间、墙壁和门,那么你可以传递不同的参数来改变房间、墙壁和门的类
- Builder:传递一个对象给 CreateMaze,这个对象可以在它所建造的迷宫中使用增加房间、墙壁和门的操作来全面创建一个新的迷宫,那么你可以使用继承来改变迷宫的一些部分或迷宫的建造方式。
- Prototype:CreateMaze 由多种原型的房间、墙壁和门对象参数化,它复制并将这些对象增加到迷宫中,那么你可以用不同的对象替换这些原型对象以改变迷宫的构成。
- Singleton:可以保证每个游戏中仅有一个迷宫而且所有的游戏对象都可以迅速访问它——不需要求助于全局变 量或函数。Singleton 也使得迷宫易于扩展或替换,且不需要变动已有的代码。
讨论
对系统进行参数化主要有 2 种方法:












方法实现:在 Instance 方法中懒初始化


对象适配器




继承结构如下:
