创建型模式
是什么?
- 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。
- 创建型模式在什么被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予你很大的灵活性。
通过“迷宫”案例谈创建型模式
1.问题关注点:迷宫如何创建的
2.我们将一个迷宫定义为一系列房间(Room),一个房间知道它的邻居;可能的邻居要么是另一个房间,要么是一堵墙(Wall)、或者是到另一个房间的一扇门(Door)。
3.方向: enum Direction {North,South,East,West};
MapSite类是所有迷宫组件的公共抽象类。为简化例子,MapSite仅定义了一个操作Enter,它的含义决定于你在进入什么。如果你进入一个房间,那么你的位置会发生改变。如果你试图进入一扇门,那么这两件事中就有一件会发生:如果门是开着的,你进入另一个房间。如果门关着,你就会碰壁。
4.Room是MapSite的一个具体的子类,而MapSite定义了迷宫中构件之间的主要关系。Room有指向其他MapSite对象的引用,并保存一个房间号,这个数字用来标识迷宫中的房间。
5.MazeGame类用来创建迷宫。
情景:
抽象工厂模式(ABSTRACT FACTORY) 对象创建型模式,别名 Kit
- 意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 - 动机
在软件系统中,我们经常面临着一系列相关或者相互依赖的对象的创建工作,又由于需求的多样化,导致在系统的演化过程中,存在越来越多的系列对象的创建工作。这时,常规的对象创建模式已然不能很灵活地处理这种场景,我们需要提供一种更加紧凑的“封装机制”来规避客户程序与这种多系列对象创建工作的紧耦合。 - 结构图
- 参与者
1.AbstractFactory:声明一个创建抽象产品对象的操作接口。
2.ConcreteFactory:实现创建具体产品的操作。
3.AbstractProduct:为一类产品对象声明一个接口。
4.ConcreteProduct:定义一个将被相应的具体工厂创建的产品对象。实现AbstractProduct接口.
5.Client:仅使用由AbstractFactory和AbstractProduct类声明的接口.
- 协作
- 效果:主要适用于稳定的产品,不适合经常变动的产品,适用于产品族。
- 实现
//场景:华为具有华为手机,华为电脑,小米同样有小米手机,小米电脑,那么创建这种产品族,就可以使用抽象工厂模式了。
/**
* 第一步:创建手机抽象类和笔记本抽象类
* 第二步:创建小米手机、小米电脑、华为手机、华为电脑的实现类继承第一步的抽象类去生产自己对应的产品。
* 第三步:创建工厂抽象接口,用于生产手机和电脑。
* 第四步:创建小米工厂和华为工厂对应的实现类实现上一步的接口。
* 第五步:测试,使用各自的工厂去生产自己的产品。
*/
//代码如下:
//第一步:创建手机抽象类和笔记本抽象类,用于生产手机和电脑
public abstract class AbstractPhone {
/**
* 生产
*/
public abstract void