• 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         }
  • 相关阅读:
    C# WinForm 取消DataGridView的默认选中Cell 使其不反蓝
    我们 成就了每个我的世界
    [转]firefox与IE的事件处理
    C# WinForm CheckedListBox 使用的相关简单总结
    [书目20090216]高绩效人士的五项管理 李践作品
    [转]asp.net导出Excel/Csv格式数据最优方案(C#)
    [文摘20090201]男女朋友~~需记住亦舒的77句话
    WML 参考手册
    [引]ASP.NET 移动网页 与 如何:使用仿真程序和浏览器在部署移动 Web 应用程序之前对其进行测试
    [文摘20090203]3G知识入门讲座
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/7138176.html
Copyright © 2020-2023  润新知