设计模式解析(第二版)笔记6 Abstract Factory 抽象工厂模式
2008-12-11 13:23
471 查看
意图: 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类.
UML:
代码:
switch语句本身常常说明:(1)需要多态行为;(2)存在职责错放.
这个模式之所以称为抽象工厂,是因为它要创建的东西本身是由抽象定义的.
UML:
代码:
// Abstract Factory pattern -- Structural example |
using System; namespace DoFactory.GangOfFour.Abstract.Structural { /// <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 ConcreteFactory1(); Client client1 = new Client(factory1); client1.Run(); // Abstract factory #2 AbstractFactory factory2 = new ConcreteFactory2(); Client client2 = new Client(factory2); client2.Run(); // Wait for user input Console.ReadKey(); } } /// <summary> /// The 'AbstractFactory' abstract class /// </summary> abstract class AbstractFactory { public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB(); } /// <summary> /// The 'ConcreteFactory1' class /// </summary> class ConcreteFactory1 : AbstractFactory { public override AbstractProductA CreateProductA() { return new ProductA1(); } public override AbstractProductB CreateProductB() { return new ProductB1(); } } /// <summary> /// The 'ConcreteFactory2' class /// </summary> class ConcreteFactory2 : AbstractFactory { public override AbstractProductA CreateProductA() { return new ProductA2(); } public override AbstractProductB CreateProductB() { return new ProductB2(); } } /// <summary> /// The 'AbstractProductA' abstract class /// </summary> abstract class AbstractProductA { } /// <summary> /// The 'AbstractProductB' abstract class /// </summary> abstract class AbstractProductB { public abstract void Interact(AbstractProductA a); } /// <summary> /// The 'ProductA1' class /// </summary> class ProductA1 : AbstractProductA { } /// <summary> /// The 'ProductB1' class /// </summary> class ProductB1 : AbstractProductB { public override void Interact(AbstractProductA a) { Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name); } } /// <summary> /// The 'ProductA2' class /// </summary> class ProductA2 : AbstractProductA { } /// <summary> /// The 'ProductB2' class /// </summary> class ProductB2 : AbstractProductB { public override void Interact(AbstractProductA a) { Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name); } } /// <summary> /// The 'Client' class. Interaction environment for the products. /// </summary> class Client { private AbstractProductA _abstractProductA; private AbstractProductB _abstractProductB; // Constructor public Client(AbstractFactory factory) { _abstractProductB = factory.CreateProductB(); _abstractProductA = factory.CreateProductA(); } public void Run() { _abstractProductB.Interact(_abstractProductA); } } } |
这个模式之所以称为抽象工厂,是因为它要创建的东西本身是由抽象定义的.
相关文章推荐
- 设计模式解析(第二版)笔记5 Bridge 桥接模式
- 设计模式解析(第二版)笔记3
- 设计模式解析(第二版)笔记4 Strategy 策略模式
- 设计模式解析第二版阅读笔记
- 设计模式学习笔记(三)——Abstract Factory抽象工厂模式 (转)
- 设计模式学习笔记(一)——抽象工厂模式
- 菜鸟学设计模式系列笔记之抽象工厂模式
- 设计模式学习笔记--抽象工厂模式(Abstract Factory Pattern)【创建型模式】
- 笔记--设计模式精解c++-GoF 23 种设计模式解析
- 设计模式笔记二:抽象工厂模式
- 笔记--设计模式精解c++-GoF 23 种设计模式解析
- 设计模式学习笔记--Abstract Factory抽象工厂模式
- 设计模式(c++)笔记之二(AbstractFactory抽象工厂模式)
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- 设计模式学习笔记——抽象工厂模式
- 四 抽象工厂模式——设计模式学习笔记
- 设计模式笔记-抽象工厂模式
- [设计模式整理笔记 四] 抽象工厂模式(Abstract Factory)
- 设计模式笔记(3)---抽象工厂模式(创建型)
- iOS设计模式解析(四) —— 抽象工厂模式