设计模式 之 抽象工厂模式
设计模式 之 抽象工厂模式
1 /// <summary> 2 /// 根据实例化 不同的工厂,生产出产品, 最后调用实现该具体产品的方法实现。 3 /// </summary> 4 class Program 5 { 6 static void Main(string[] args) 7 { 8 Abstractfactory factory = new FactoryA(); 9 Client c1 = new Client(factory); 10 c1.Run(); 11 Console.Read(); 12 } 13 } 14 //抽象工厂 主要是生产啥产品 15 abstract class Abstractfactory 16 { 17 public abstract AbsProductA CreateProductA(); 18 public abstract AbsProductB CreateProductB(); 19 } 20 class FactoryA : Abstractfactory 21 { 22 public override AbsProductB CreateProductB() 23 { 24 return new Product2(); 25 } 26 public override AbsProductA CreateProductA() 27 { 28 return new Product1(); 29 } 30 } 31 class FactoryB : Abstractfactory 32 { 33 public override AbsProductB CreateProductB() 34 { 35 return new Product2(); 36 } 37 public override AbsProductA CreateProductA() 38 { 39 return new Product1(); 40 } 41 42 } 43 44 //抽象工产品 主要是实现某产品 如何生产 45 abstract class AbsProductA 46 { 47 public abstract void ProductA(); 48 public abstract void ProductB(); 49 } 50 //抽象工产品 主要是实现如何生产 51 abstract class AbsProductB 52 { 53 public abstract void ProductA(); 54 public abstract void ProductB(); 55 } 56 57 //具体实现如何生产产品 58 class Product1:AbsProductA 59 { 60 public override void ProductA() 61 { 62 Console.WriteLine("AbsProductA生产了产品A"); 63 } 64 public override void ProductB() 65 { 66 Console.WriteLine("AbsProductA生产产品B"); 67 } 68 } 69 70 //具体实现如何生产产品 71 class Product2: AbsProductB 72 { 73 public override void ProductA() 74 { 75 Console.WriteLine("AbsProductB生产了产品A"); 76 } 77 public override void ProductB() 78 { 79 Console.WriteLine("AbsProductB生产了产品B"); 80 } 81 } 82 83 class Client 84 { 85 public AbsProductA absProductA; 86 public AbsProductB absProductB; 87 public Client( Abstractfactory factory) 88 { 89 absProductA = factory.CreateProductA(); 90 absProductB = factory.CreateProductB(); 91 } 92 93 public void Run() 94 { 95 absProductA.ProductA(); 96 } 97 }