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         }
  • 相关阅读:
    DGbroker三种保护模式的切换
    oracle11G使用DGbroker创建dg
    oracle数据泵示例
    oracle DB_LINK
    oracle数据库rman备份计划及恢复
    oracle查看对象信息
    mybatis学习:mybatis的注解开发和编写dao实现类的方式入门
    mybatis学习:mybatis的环境搭建与入门
    mybatis框架学习:
    入门servlet:request请求转发和共享数据
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/7138176.html
Copyright © 2011-2022 走看看