抽象工厂模式 AbstractFactory---Design Pattern 2
2014-08-11 23:03
357 查看
抽象工厂模式 AbstractFactory
抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类。
抽象工厂对于系列产品的变化支持 “开放——封闭”原则(指的是要求系统对扩展开放,对修改封闭),扩展起来非常简便,但对于添加新产品这种情况就不支持”开放——封闭 “原则。
抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要知道或关心实际生产出的具体产品是什么。这样客户就可以从具体产品中被解耦。
抽象工厂模式很难支持新种类产品的变化。这是因为抽象工厂接口中已经确定了可以被创建的产品集合,如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,这样也就违背了“开发——封闭”原则。
也就是说抽象工厂的使用范围是:
某个具体工厂需要负责已确定的一系列产品(多元化)的创建工作。
(参考)
一个系统不要求依赖产品类实例如何被创建、组合和表达的表达,这点也是所有工厂模式应用的前提。
这个系统有多个系列产品,而系统中只消费其中某一系列产品
系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现。
抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类。
//抽象工厂类“总部”AbstractFactory封装了一系列创建产品的接口 //[优点]虽然提高了扩展性,[缺点]但在增加接口(新产品)时会涉及到所有子类的更改 public abstract class AbstractFactory { public abstract ChineseFood CreateChineseFood(); //提供创建中餐的接口 public abstract WestFood CreateWestFood(); //提供创建西餐的接口 } //原来的“分工厂” 子类BeijingFactory负责实现北京特色产品的创建 public class BeijingFactory : AbstractFactory { //产品的具体创建 public override ChineseFood CreateChineseFood() { return new ChineseFoodBeijingStyle(); //返回北京特色的中餐 } public override WestFood CreateWestFood() { return new WestFoodBeijingStyle(); //返回北京特色的西餐 } } //新增的“分工厂” 子类WashingtonFactory负责实现华盛顿特色产品的创建 public class WashingtonFactory : AbstractFactory { public override ChineseFood CreateChineseFood() { return new ChineseFoodWashingtonStyle(); //返回华盛顿特色的中餐 } public override WestFood CreateWestFood() { return new WestFoodWashingtonStyle(); //返回华盛顿特色的西餐 } } //中餐 抽象类 public abstract class ChineseFood { public abstract void Print(); } //西餐 抽象类 public abstract class WestFood { public abstract void Print(); } //原来的需求 //中餐 北京特色 具体类 public class ChineseFoodBeijingStyle : ChineseFood { public override void Print() { Console.WriteLine("北京特色的中餐!"); } } //西餐 北京特色 具体类 public class WestFoodBeijingStyle : WestFood { public override void Print() { Console.WriteLine("北京特色的西餐!"); } } //新增的需求 //中餐 华盛顿特色 具体类 public class ChineseFoodWashingtonStyle : ChineseFood { public override void Print() { Console.WriteLine("华盛顿特色的中餐!"); } } //西餐 华盛顿特色 具体类 public class WestFoodWashingtonStyle : WestFood { public override void Print() { Console.WriteLine("华盛顿特色的西餐!"); } } //程序调用入口(Main方法) class Program { static void Main(string[] args) { //原来的需求 AbstractFactory beijingFactory = new BeijingFactory(); beijingFactory.CreateChineseFood().Print(); beijingFactory.CreateWestFood().Print(); //新增的需求 AbstractFactory washingtonFactory = new WashingtonFactory(); washingtonFactory.CreateChineseFood().Print(); washingtonFactory.CreateWestFood().Print(); Console.ReadKey(); } }
抽象工厂对于系列产品的变化支持 “开放——封闭”原则(指的是要求系统对扩展开放,对修改封闭),扩展起来非常简便,但对于添加新产品这种情况就不支持”开放——封闭 “原则。
抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要知道或关心实际生产出的具体产品是什么。这样客户就可以从具体产品中被解耦。
抽象工厂模式很难支持新种类产品的变化。这是因为抽象工厂接口中已经确定了可以被创建的产品集合,如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,这样也就违背了“开发——封闭”原则。
也就是说抽象工厂的使用范围是:
某个具体工厂需要负责已确定的一系列产品(多元化)的创建工作。
(参考)
一个系统不要求依赖产品类实例如何被创建、组合和表达的表达,这点也是所有工厂模式应用的前提。
这个系统有多个系列产品,而系统中只消费其中某一系列产品
系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现。
相关文章推荐
- C++设计模式之AbstractFactory抽象工厂模式.txt
- AbstractFactory--抽象工厂模式java实现
- FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式
- 面向对象设计模式之AbstractFactory抽象工厂模式(创建型)
- C# 抽象工厂模式(AbstractFactory)
- 初学设计模式【6】抽象工厂模式——AbstractFactory
- 抽象工厂模式AbstractFactoryPattern
- C++设计模式-AbstractFactory抽象工厂模式
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- C#设计模式系列:抽象工厂模式(AbstractFactory)
- 设计模式——抽象工厂模式AbstractFactory
- 面向对象设计模式之AbstractFactory抽象工厂模式(创建型)
- C++设计模式-AbstractFactory抽象工厂模式
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- 简单工厂及抽象工厂模式(SimpleFactory、AbstractFactory)
- 设计模式2 - 抽象工厂模式AbstractFactory Method
- 对象创建型之AbstractFactory(抽象工厂模式)
- Java23种设计模式案例:抽象工厂模式(abstractFactory)
- 3.AbstractFactory-抽象工厂模式