抽象工厂模式

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace DesignPattern.CreationalPattern
  8 {
  9     #region 抽象工厂模式要点
 10 
 11     //定义:提供抽象接口用于创建一系列相关或依赖的对象,而不具体指定对象类型
 12 
 13     //优点:
 14     //1.抽象工厂类将创建具体类型产品的过程推迟到其子类进行,将对象的创建封装起来,减少对具体对象的依赖耦合
 15     //2.遵循开放封闭原则,可在不修改抽象工厂代码的情况下为其增加新的具体工厂用于生产一系列新产品
 16     //缺点:
 17     //若要增加新的产品接口,就需要修改抽象工厂,所有具体工厂就都需要实现新的接口,违反开放封闭原则
 18     //使用注意:
 19     //一个系统不要求依赖产品类实例如何被创建、组合和表达的表达,这点也是所有工厂模式应用的前提。
 20     //这个系统有多个系列产品,而系统中只消费其中某一系列产品
 21     //系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现。
 22 
 23     #endregion
 24 
 25     //示例:
 26     public abstract class AbstractFactoryPattern
 27     {
 28         public abstract Shoes MakeShoe();
 29         public abstract Coat MakeCoat();
 30         public abstract Pants MakePant();
 31     }
 32 
 33 
 34     public class AdidasFactory : AbstractFactoryPattern
 35     {
 36         public override Shoes MakeShoe()
 37         {
 38             return new AdidasShoes();
 39         }
 40 
 41         public override Coat MakeCoat()
 42         {
 43             return new AdidasCoat();
 44         }
 45 
 46         public override Pants MakePant()
 47         {
 48             return new AdidasPants();
 49         }
 50     }
 51 
 52 
 53     public class NikeFactory : AbstractFactoryPattern
 54     {
 55         public override Shoes MakeShoe()
 56         {
 57             return new NikeShoes();
 58         }
 59 
 60         public override Coat MakeCoat()
 61         {
 62             return new NikeCoat();
 63         }
 64 
 65         public override Pants MakePant()
 66         {
 67             return new NikePants();
 68         }
 69     }
 70 
 71     /**************************************需创建的对象*********************************/
 72 
 73     public abstract class Shoes
 74     {
 75         public abstract void Print();
 76     }
 77 
 78     public class AdidasShoes : Shoes
 79     {
 80         public override void Print()
 81         {
 82             Console.WriteLine("adidas shoes");
 83         }
 84     }
 85 
 86     public class NikeShoes : Shoes
 87     {
 88         public override void Print()
 89         {
 90             Console.WriteLine("Nike shoes");
 91         }
 92     }
 93 
 94 
 95     public abstract class Pants
 96     {
 97         public abstract void Print();
 98     }
 99 
100     public class AdidasPants : Pants
101     {
102         public override void Print()
103         {
104             Console.WriteLine("adidas Pants");
105         }
106     }
107     public class NikePants : Pants
108     {
109         public override void Print()
110         {
111             Console.WriteLine("nike Pants");
112         }
113     }
114 
115 
116     public abstract class Coat
117     {
118         public abstract void Print();
119     }
120 
121     public class AdidasCoat : Coat
122     {
123         public override void Print()
124         {
125             Console.WriteLine("adidas Coat");
126         }
127     }
128 
129     public class NikeCoat : Coat
130     {
131         public override void Print()
132         {
133             Console.WriteLine("nike Coat");
134         }
135     }
136 }

 

posted on 2021-06-25 11:42  HowieGo  阅读(36)  评论(0)    收藏  举报

导航