设计模式 抽象工厂

来源:互联网 发布:mac os sierra 镜像 编辑:程序博客网 时间:2024/04/26 23:46
/*************************************************抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。参考http://www.dofactory.com/Patterns/PatternAbstract.aspx#_self2*************************************************/using System;namespace Pattern.AbstractFactory{abstract class AbstractProductA{public abstract void Display();}class ProductA1:AbstractProductA{public override void Display(){Console.WriteLine("ProductA1");}}class ProductA2:AbstractProductA{public override void Display(){Console.WriteLine("ProductA2");}}abstract class AbstractProductB{public abstract void Display();}class ProductB1:AbstractProductB{public override void Display(){Console.WriteLine("ProductB1");}}class ProductB2:AbstractProductB{public override void Display(){Console.WriteLine("ProductB2");}}abstract class AbstractFactory{public abstract AbstractProductA CreateProductA();public abstract AbstractProductB CreateProductB();}class ConcreteFactory1:AbstractFactory{public override AbstractProductA CreateProductA(){return new ProductA1();}public override AbstractProductB CreateProductB(){return new ProductB1();}}class ConcreteFactory2:AbstractFactory{public override AbstractProductA CreateProductA(){return new ProductA2();}public override AbstractProductB CreateProductB(){return new ProductB2();}}class Client{private AbstractProductA _abstractProductA;private AbstractProductB _abstractProductB;public Client(AbstractFactory factory){_abstractProductA = factory.CreateProductA();_abstractProductB = factory.CreateProductB();}public void Run(){_abstractProductA.Display();_abstractProductB.Display();}}public class MainApp{public static void Main(){AbstractFactory factory = new ConcreteFactory2();Client client = new Client(factory);client.Run();Console.Read();}}}