设计模式实例与代码:Abstract Factory模式
2012-04-18 23:54
549 查看
意图/定义:需要为特定的客户提供对象组
问题:需要实例化一组相关的对象
解决方案:协调对象组的创建。撮合 种方法,将如何执行对象实例化的规则从使用这些对象的客户对象中提取出来
参与者与协作者:AbstractFactory为如何创建对象组的每个成员定义接口。通常每个组都独立的ConcreteFactory来创建
效果:这个模式将"使用哪些对象的规则"与"如何使用这些对象"的逻辑分离开来
实现:定义一个抽象类来指定创建哪些对象。然后为每个组实现一个具体类。可以用表或文件完成同样的任务。
示例代码:我们继续上次工厂方法中举的肯德基和麦当劳的例子,客户去快餐店,并不只吃一种,可能吃多种如薯片、汉堡、炸鸡等,客户去到不同的快餐店就能吃到此快餐店所生产的所有食物。
问题:需要实例化一组相关的对象
解决方案:协调对象组的创建。撮合 种方法,将如何执行对象实例化的规则从使用这些对象的客户对象中提取出来
参与者与协作者:AbstractFactory为如何创建对象组的每个成员定义接口。通常每个组都独立的ConcreteFactory来创建
效果:这个模式将"使用哪些对象的规则"与"如何使用这些对象"的逻辑分离开来
实现:定义一个抽象类来指定创建哪些对象。然后为每个组实现一个具体类。可以用表或文件完成同样的任务。
示例代码:我们继续上次工厂方法中举的肯德基和麦当劳的例子,客户去快餐店,并不只吃一种,可能吃多种如薯片、汉堡、炸鸡等,客户去到不同的快餐店就能吃到此快餐店所生产的所有食物。
using System; namespace AbstractFactory { /// <summary> /// MainApp startup class for Structural /// Abstract Factory Design Pattern. /// </summary> class MainApp { /// <summary> /// Entry point into console application. /// </summary> public static void Main() { // Abstract factory #1 AbstractFactory factory1 = new KFC_Factory(); Client client1 = new Client(factory1); client1.Run(); // Abstract factory #2 AbstractFactory factory2 = new MD_Factory(); Client client2 = new Client(factory2); client2.Run(); // Wait for user input Console.ReadKey(); } } /// <summary> /// The 'AbstractFactory' abstract class /// </summary> abstract class AbstractFactory { public abstract Chips CreateProductChips(); public abstract Hamburg CreateProductHamburg(); public abstract Cola CreateProductCola(); } /// <summary> /// The 'ConcreteFactory1' class /// </summary> class KFC_Factory : AbstractFactory { public override Chips CreateProductChips() { return new KFC_Chips(); } public override Hamburg CreateProductHamburg() { return new KFC_Hamburg(); } public override Cola CreateProductCola() { return new CocaCola(); } } /// <summary> /// The 'ConcreteFactory2' class /// </summary> class MD_Factory : AbstractFactory { public override Chips CreateProductChips() { return new MD_Chips(); } public override Hamburg CreateProductHamburg() { return new MD_Hamburg(); } public override Cola CreateProductCola() { return new PepsiCola(); } } /// <summary> /// The 'AbstractProductA' abstract class /// </summary> abstract class Chips { } /// <summary> /// The 'AbstractProductB' abstract class /// </summary> abstract class Hamburg { public abstract void Interact(Chips a,Cola b); } /// <summary> /// The 'AbstractProductC' abstract class /// </summary> abstract class Cola { } /// <summary> /// The 'ProductA1' class /// </summary> class KFC_Chips : Chips { } /// <summary> /// The 'ProductB1' class /// </summary> class KFC_Hamburg : Hamburg { public override void Interact(Chips a, Cola b) { Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name + " and " + b.GetType().Name); } } /// <summary> /// The 'ProductC1' class /// </summary> class CocaCola : Cola { } /// <summary> /// The 'ProductA2' class /// </summary> class MD_Chips : Chips { } /// <summary> /// The 'ProductB2' class /// </summary> class MD_Hamburg : Hamburg { public override void Interact(Chips a,Cola b) { Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name + " and "+b.GetType().Name); } } /// <summary> /// The 'ProductC2' class /// </summary> class PepsiCola : Cola { } /// <summary> /// The 'Client' class. Interaction environment for the products. /// </summary> class Client { private Chips _chips; private Hamburg _hamberg; private Cola _cola; // Constructor public Client(AbstractFactory factory) { _chips = factory.CreateProductChips(); _hamberg = factory.CreateProductHamburg(); _cola = factory.CreateProductCola(); } public void Run() { _hamberg.Interact(_chips, _cola); } } }
相关文章推荐
- PHP设计模式之观察者模式(Observer)详细介绍和代码实例
- PHP设计模式之观察者模式(Observer)详细介绍和代码实例
- 设计模式与实例代码:Proxy模式
- 设计模式与实例代码:Bridge模式
- 设计模式与实例代码:Visitor模式
- PHP设计模式之适配器模式代码实例
- (转)23种设计模式(4):建造者模式(实例代码并不怎么好)
- PHP设计模式之装饰者模式代码实例
- PHP设计模式之适配器模式代码实例
- 【设计模式】java生产者和消费者的代码实例
- 30. 代码实例-设计模式-回调方式使用模板方法
- 设计模式与实例代码:Adapter模式
- 29. 代码实例-设计模式-模板方法
- 设计模式与实例代码:Observer模式
- 设计模式实例与代码:Prototype模式
- 简单Java代码实例助你通俗易懂的理解什么是装饰(者)设计模式 (Decorator)
- 关于Singleton设计模式的计数器代码实例(拷贝粘贴即可学习)
- 设计模式与实例代码:Facade模式
- 设计模式与实例代码:Strategy模式
- PHP设计模式之装饰者模式代码实例