设计模式之抽象工厂模式
来源:互联网 发布:新热血英豪mac 编辑:程序博客网 时间:2024/05/16 07:09
前文中介绍了简单工厂模式和工厂方法模式,本文介绍工厂模式中的最后一种:抽象工厂模式。
应用场景:假设现在要模拟汽车生产这样一个过程,我们知道汽车生产包括:车门的生成、轮子的生产等等;
不同的汽车厂商生成的车门、轮子是不相同的,但所有的汽车都是由轮子、车门这些部件组成的,汽车的构成
是不变的,并且轮子、车门是构成汽车的一系列的对象,我们把构成一个事物的一系列抽象对象,封装成一个
抽象工厂,具体的事物(如宝马车)继承自这个抽象工厂,然后实现相关的接口即可。
代码:
namespace ConsoleTest.test{ public class AbstractFactoryTest { private CarFactory cf; public void Test() { cf = new BMWFactory(); // cf.CreateDoor(); cf.CreateWheel(); Console.ReadLine(); } } /// <summary> /// 表示汽车的抽象工厂。 /// </summary> abstract class CarFactory { public abstract IWheel CreateWheel(); public abstract IDoor CreateDoor(); } /// <summary> /// 轮子接口。 /// </summary> interface IWheel { IWheel Create(); } /// <summary> /// 车门接口。 /// </summary> interface IDoor { IDoor Create(); } /// <summary> /// 生产宝马车的工厂。 /// </summary> class BMWFactory : CarFactory { /// <summary> /// 生成轮子。 /// </summary> /// <returns></returns> override public IWheel CreateWheel() { return new BMWWheel().Create(); } /// <summary> /// 生成车门。 /// </summary> /// <returns></returns> override public IDoor CreateDoor() { return new BMWDoor().Create(); } } /// <summary> /// 宝马轮子。 /// </summary> class BMWWheel : IWheel { public IWheel Create() { Console.WriteLine("生成宝马轮子..."); return this; } } /// <summary> /// 宝马车门。 /// </summary> class BMWDoor : IDoor { public IDoor Create() { Console.WriteLine("生成宝马车门..."); return this; } }}
从代码可以看出,在具体的客户类AbstractFactoryTest中只需要保存抽象工厂类CarFactory就可以了,在使用时动态实例化为需要的工厂(BMWFactory),这样就将客户类与具体的对象解耦了。
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之-抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 有一群这样的人在开发类似Windows的系统-ReactOS
- java study 07day--final关键字
- 布隆过滤器
- 识别UTF8无BOM
- php进行xss攻击修补
- 设计模式之抽象工厂模式
- NoSql
- Problem 1057 ab from http://acm.fzu.edu.cn/problem.php?pid=1057
- selenium webdriver学习(十三)------------如何利用Actions类模拟鼠标和键盘的操作
- Java study 07day--抽象类
- Eclipse插件开发-调用默认编辑器打开指定文件
- Qt QPainter QpinterPath QPixmap常用语句
- 关于JQuery中两个要注意的地方(结合Extjs的grid滚动条及使用form插件提交表单)
- libgdx 学习笔记(二)相机和观察点