设计模式的学习--(4)抽象工厂模式
来源:互联网 发布:成都气象数据 编辑:程序博客网 时间:2024/06/05 08:01
抽象工厂模式 –产品族的创建
抽线工厂模式的定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。和工厂方法模式不同的地方在于抽象工厂模式是提供了创建一系列类的实例的工厂方法。
还是拿制造汽车来举例子:某汽车公司要制造两款汽车,一款是Mini,一款是Suv,如果利用工厂方法模式来建模的话,可以想象要创建成倍增长的类,显然不适合,那么,我们可以用抽象工厂模式来创建:
namespace AbstractFactoryModel{ class Program { static void Main(string[] args) { IFactory miniFactory=new MiniFactory(); IFactory suvFactory=new SuvFactory(); miniFactory.CreateTyre(); miniFactory.CreateWindow(); suvFactory.CreateTyre(); suvFactory.CreateWindow(); Console.ReadKey(); } } public interface IFactory//创建工厂模型 { ITyre CreateTyre(); IWindow CreateWindow(); } public interface ITyre//创建轮胎模型 { void Message(); } public interface IWindow//创建车窗模型 { void Message(); } public class MiniFactory : IFactory//创建mini汽车的工厂类 { public ITyre CreateTyre() { return new MiniTyre(); } public IWindow CreateWindow() { return new MiniWindow(); } } public class SuvFactory:IFactory//创建suv汽车的工厂类 { public ITyre CreateTyre() { return new SuvTyre(); } public IWindow CreateWindow() { return new SuvWindow(); } } public class MiniTyre : ITyre//创建mini汽车的轮胎 { public void Message() { Console.WriteLine("Create a Mini-Tyre"); } } public class MiniWindow : IWindow//创建mini汽车的车窗 { public void Message() { Console.WriteLine("Create Mini-Window"); } } public class SuvTyre : ITyre//创建suv汽车的轮胎 { public void Message() { Console.WriteLine("Create Suv-tyre"); } } public class SuvWindow : IWindow//创建suv汽车的车窗 { public void Message() { Console.WriteLine("Create Suv-Window"); } }}
好处在于,如果我们需要创建一款卡车,那么我们直接创建一个卡车的factory(同样集成自IFactory),再创建相应的卡车的零部件类进行制造即可。
缺点在于,如果我们需要创建汽车前围板或者车门等零部件,那么我们就得修改源代码(不满足开闭原则),在接口中添加相应的方法以及其他实现类中的实现。
阅读全文
0 0
- 设计模式的学习--(4)抽象工厂模式
- 设计模式-抽象工厂模式(学习)
- 设计模式(4)-抽象工厂模式及抽象工厂与工厂模式的区别
- 设计模式学习(2)工厂模式,抽象工厂模式
- 设计模式(4)-抽象工厂模式
- 设计模式学习笔记(4)抽象工厂
- 设计模式学习(四)抽象工厂
- 设计模式学习--抽象工厂
- 设计模式(三) 抽象工厂的学习和使用
- 设计模式学习----抽象工厂模式
- 设计模式之抽象工厂模式学习
- 设计模式学习-----抽象工厂模式
- 设计模式学习笔记-抽象工厂模式
- GoF设计模式学习-抽象工厂模式
- 设计模式学习—抽象工厂模式
- 学习设计模式之“抽象工厂模式”
- 设计模式学习笔记--抽象工厂模式
- 设计模式学习--抽象工厂模式
- ACM (6) 喷水装置(一)
- java---equal 与 == 区别
- 前端框架 zTree 从数据库中动态加载树形菜单
- Android热修复技术(一)
- 【Java】【String】String.intern()
- 设计模式的学习--(4)抽象工厂模式
- 云服务器添加环境变量
- oracle使用PLSQL导出dmp文件一闪而过的解决办法
- Java参数传递到底是值传递还是引用传递?
- HashMap和Hashtable的区别
- 判断点在凸多边形内(基于经纬度坐标)
- HTML标签总结
- 探索Kotlin的隐性成本
- Windows远程桌面连接