创建型模式
- 类创建型模式使用继承改变被实例化的类
对象创建型模式将实例化委托给另一个对象
创建型对象的意义:系统的演化越来越复杂,重心从一组固定行为的硬编码转移为定义一个较小的基本行为集,这些行为集可以被任意组合成任意更加复杂的行为,这样创建有特定行为的对象要求的不仅仅是实例化一个类
将系统使用了哪些具体的类信息封装起来
- 隐藏了这些类的实例是如何被创建和放在一期的
迷宫初始化case:
我们初始化一个迷宫,而不考虑玩家的具体行为,仅仅做初始化,在这个case中首先声明有以下基本组件
- 房间(room)
- 墙(wall)
- 门(door)
首先有一个组建基类
1 | class MapSite { |
其余的三个组建都要继承这个类
room类
1 | class Room : public MapSite { |
wall类
1 | class Wall : public MapSite { |
door类
1 | class Door : public MapSite { |
迷宫类
1 | class Maze{ |
同时定义迷宫游戏类初始化迷宫地图
1 | Maze* MazeGame::CreateMaze(){ |
ok,这样我们就完成了一个迷宫类的基本实现,仅仅有两个宫格的迷宫就有如此多代码,显然是相当复杂的。我们可以将那一堆setSide在Room初始化的时候默认初始化为墙,会使得代码更加精简,但是这个代码的根本 问题不在于代码的长度,而是在于,迷宫的实际生成都依赖于硬编码,如果需要改变布局就需要,改变这个成员函数,这个不方便代码的重用。
创建型模式可以将这个系统设计的更加灵活,但是不一定为更小,特别是,它们将便于修改定义一个迷宫构件的类
Abstract Factory
意图
提供一个创建一系列相关或者相互依赖的=对象的接口,而无需指定它们具体的类
别名
Kit(工具箱)
举例
比如说我们要实现一个支持多个画风的用户界面工具包(滚动条,窗口,按钮等),那么我们不应该在具体的窗口组件上编码他的视感风格,否则实例化之后,不方便切换画风。
为了解决这个问题,我们可以定义一个抽象的WidgetFactory类,这个类声明了一个用来创建每一类基本窗口组件的接口。每一个窗口组件有一个抽象类,而具体的子类则实现了窗口组件的特定视感风格,
对于每一个抽象窗口组件类,WidgetFactory接口都有一个返回新窗口组件对象的操作。