读《设计模式:可复用面向对象软件的基础》-- 创建型模式之抽象工厂模式

创建型模式

是什么?

  1. 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。
  2. 创建型模式在什么被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予你很大的灵活性。

通过“迷宫”案例谈创建型模式

1.问题关注点:迷宫如何创建的
2.我们将一个迷宫定义为一系列房间(Room),一个房间知道它的邻居;可能的邻居要么是另一个房间,要么是一堵墙(Wall)、或者是到另一个房间的一扇门(Door)。
3.方向: enum Direction {North,South,East,West};
MapSite类是所有迷宫组件的公共抽象类。为简化例子,MapSite仅定义了一个操作Enter,它的含义决定于你在进入什么。如果你进入一个房间,那么你的位置会发生改变。如果你试图进入一扇门,那么这两件事中就有一件会发生:如果门是开着的,你进入另一个房间。如果门关着,你就会碰壁。
MapSite
4.Room是MapSite的一个具体的子类,而MapSite定义了迷宫中构件之间的主要关系。Room有指向其他MapSite对象的引用,并保存一个房间号,这个数字用来标识迷宫中的房间。
MapSite
Maze
5.MazeGame类用来创建迷宫。
MazeGame

情景:引出创建型模式
解决方案

抽象工厂模式(ABSTRACT FACTORY) 对象创建型模式,别名 Kit

  • 意图
    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  • 动机
    在软件系统中,我们经常面临着一系列相关或者相互依赖的对象的创建工作,又由于需求的多样化,导致在系统的演化过程中,存在越来越多的系列对象的创建工作。这时,常规的对象创建模式已然不能很灵活地处理这种场景,我们需要提供一种更加紧凑的“封装机制”来规避客户程序与这种多系列对象创建工作的紧耦合。
  • 结构图
    结构图
  • 参与者

1.AbstractFactory:声明一个创建抽象产品对象的操作接口。
2.ConcreteFactory:实现创建具体产品的操作。
3.AbstractProduct:为一类产品对象声明一个接口。
4.ConcreteProduct:定义一个将被相应的具体工厂创建的产品对象。实现AbstractProduct接口.
5.Client:仅使用由AbstractFactory和AbstractProduct类声明的接口.

  • 协作
    协作
  • 效果:主要适用于稳定的产品,不适合经常变动的产品,适用于产品族。
    效果
  • 实现
//场景:华为具有华为手机,华为电脑,小米同样有小米手机,小米电脑,那么创建这种产品族,就可以使用抽象工厂模式了。
/**
* 第一步:创建手机抽象类和笔记本抽象类
* 第二步:创建小米手机、小米电脑、华为手机、华为电脑的实现类继承第一步的抽象类去生产自己对应的产品。
* 第三步:创建工厂抽象接口,用于生产手机和电脑。
* 第四步:创建小米工厂和华为工厂对应的实现类实现上一步的接口。
* 第五步:测试,使用各自的工厂去生产自己的产品。
*/
//代码如下:
//第一步:创建手机抽象类和笔记本抽象类,用于生产手机和电脑
public abstract class AbstractPhone {
   
    /**
     * 生产
     */
    public  abstract void 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w͏l͏j͏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值