zoukankan      html  css  js  c++  java
  • 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         }
  • 相关阅读:
    HDU 4024 Dwarven Sniper’s hunting(数学公式 或者是二分)
    二分图最大匹配总结
    HDU 4022 Bombing (STL应用)
    HDU 1847 Good Luck in CET4 Everybody!(组合博弈)
    HDU 1556 Color the ball(树状数组)
    HDU 4023 Game(博弈)
    HDU 1406 完数(水题)
    HDU 4021 24 Puzzle
    Oracle 多表查询优化
    【编程之美】字符串移位包含的问题(续)
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/7138176.html
Copyright © 2011-2022 走看看