09-抽象工厂

1. 简介

  与工厂方法的区别: 工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。
  但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题。

2. 模拟场景

     上帝(工厂)不但要造人,还要各种衣服 ,不同类别的人传的衣服不同, 抽象出一个共同的工厂,约束公共的行为,其他工厂继承他。

1    public abstract class AbstractFactory
2     {
3         public abstract IPeople CreatePeople();
4         public abstract ICloses CreateClose();
5 
6     }
 1  public class ChineseFactory : AbstractFactory
 2     {
 3         public override ICloses CreateClose()
 4         {
 5             return new Close1();
 6         }
 7 
 8         public override IPeople CreatePeople()
 9         {
10             return new Chinese();
11         }
12     }
 1   public class JanpaneseFactory : AbstractFactory
 2     {
 3         public override ICloses CreateClose()
 4         {
 5             return new Close3();
 6         }
 7 
 8         public override IPeople CreatePeople()
 9         {
10             return new Janpanese();
11         }
12     }
 1  public class AmericaFactory : AbstractFactory
 2     {
 3         public override ICloses CreateClose()
 4         {
 5             return new Close2();
 6         }
 7 
 8         public override IPeople CreatePeople()
 9         {
10             return new America();
11         }
12     }
 1   static void Main(string[] args)
 2         {
 3             {
 4                 AbstractFactory ab1 = new ChineseFactory();
 5                 IPeople iPeople1 = ab1.CreatePeople();
 6                 ICloses iClose1 = ab1.CreateClose();
 7                 iPeople1.Eating();
 8                 iClose1.showClose();
 9             }
10 
11             {
12                 AbstractFactory ab1 = new AmericaFactory();
13                 IPeople iPeople1 = ab1.CreatePeople();
14                 ICloses iClose1 = ab1.CreateClose();
15                 iPeople1.Eating();
16                 iClose1.showClose();
17             }
18 
19             {
20                 AbstractFactory ab1 = new JanpaneseFactory();
21                 IPeople iPeople1 = ab1.CreatePeople();
22                 ICloses iClose1 = ab1.CreateClose();
23                 iPeople1.Eating();
24                 iClose1.showClose();
25             }
26             Console.ReadKey();
27 
28         }
原文地址:https://www.cnblogs.com/yaopengfei/p/7138176.html