• 抽象工厂模式


    抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类

    抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要知道或关心实际生产出的具体产品是什么。这样客户就可以从具体产品中被解耦。

    抽象工厂模式将具体产品的创建延迟到具体工厂的子类中,这样将对象的创建封装起来,可以减少客户端与具体产品类之间的依赖,从而使系统耦合度低,这样更有利于后期的维护和扩展,这真是抽象工厂模式的优点所在,然后抽象模式同时也存在不足的地方。下面就具体看下抽象工厂的缺点(缺点其实在前面的介绍中以已经涉及了):

    抽象工厂模式很难支持新种类产品的变化。这是因为抽象工厂接口中已经确定了可以被创建的产品集合,如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,这样也就违背了“开发——封闭”原则。

    知道了抽象工厂的优缺点之后,也就能很好地把握什么情况下考虑使用抽象工厂模式了,下面就具体看看使用抽象工厂模式的系统应该符合那几个前提:

    • 一个系统不要求依赖产品类实例如何被创建、组合和表达的表达,这点也是所有工厂模式应用的前提。
    • 这个系统有多个系列产品,而系统中只消费其中某一系列产品
    • 系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现。
      1  ///抽象工厂类,提供创建不同商品的接口
      2     public abstract class AbstractFactory
      3     {
      4         /// <summary>
      5         /// 生产轮胎
      6         /// </summary>
      7         /// <returns></returns>
      8         public abstract Tyre CreateTyre();
      9 
     10         /// <summary>
     11         /// 生产离合器
     12         /// </summary>
     13         /// <returns></returns>
     14         public abstract Clutch CreateClutch();
     15     }
     16 
     17     /// <summary>
     18     /// 轮胎抽象类
     19     /// </summary>
     20     public abstract class Tyre
     21     {
     22         /// <summary>
     23         /// 打印方法,用于输出信息
     24         /// </summary>
     25         public abstract void Print();
     26     }
     27 
     28     /// <summary>
     29     /// 离合器抽象类
     30     /// </summary>
     31     public abstract class Clutch
     32     {
     33         /// <summary>
     34         /// 打印方法,用于输出信息
     35         /// </summary>
     36         public abstract void Print();
     37     }
     38 
     39     /// <summary>
     40     /// DQ380生产工厂
     41     /// </summary>
     42     public class DQ380Factory:AbstractFactory
     43     {
     44         //离合器
     45         public override Clutch CreateClutch()
     46         {
     47             return new DQ380Clutch();
     48         }
     49 
     50         //轮胎
     51         public override Tyre CreateTyre()
     52         {
     53             return new DQ380Tyre();
     54         }
     55     }
     56 
     57     /// <summary>
     58     /// DQ500生产工厂
     59     /// </summary>
     60     public class DQ500Factory:AbstractFactory
     61     {
     62         public override Clutch CreateClutch()
     63         {
     64             return new DQ500Clutch();
     65         }
     66 
     67         public override Tyre CreateTyre()
     68         {
     69             return new DQ500Tyre();
     70         }
     71     }
     72 
     73     /// <summary>
     74     /// DQ380离合器
     75     /// </summary>
     76     public class DQ380Clutch:Clutch
     77     {
     78         public override void Print()
     79         {
     80             Console.WriteLine("DQ380离合器");
     81         }
     82     }
     83 
     84     /// <summary>
     85     /// DQ500离合器
     86     /// </summary>
     87     public class DQ500Clutch:Clutch
     88     {
     89         public override void Print()
     90         {
     91             Console.WriteLine("DQ500离合器");
     92         }
     93     }
     94 
     95     /// <summary>
     96     /// DQ380配套轮胎
     97     /// </summary>
     98     public class DQ380Tyre:Tyre
     99     {
    100         public override void Print()
    101         {
    102             Console.WriteLine("DQ380配套轮胎");
    103         }
    104     }
    105 
    106     /// <summary>
    107     /// DQ500配套轮胎
    108     /// </summary>
    109     public class DQ500Tyre:Tyre
    110     {
    111         public override void Print()
    112         {
    113             Console.WriteLine("DQ500配套轮胎");
    114         }
    115     }
    116 
    117 }

    客户端

                Console.WriteLine("【抽象工厂模式】");
                Console.WriteLine();
                Console.WriteLine("DQ380工厂:");
                Console.WriteLine();
                AbstractFactory dq380Factory = new DQ380Factory();
                dq380Factory.CreateClutch().Print();
                dq380Factory.CreateTyre().Print();
                Console.WriteLine();
                Console.WriteLine();
    
    
                Console.WriteLine("DQ500工厂:");
                Console.WriteLine();
                AbstractFactory dq500Factory = new DQ500Factory();
                dq500Factory.CreateClutch().Print();
                dq500Factory.CreateTyre().Print();
                Console.ReadLine();

     

  • 相关阅读:
    radio切换,点击方法onclick
    Android Studio 使用小技巧和快捷键
    Linux命令(1)——xargs命令
    Java-多线程基本
    POJ 2031 Building a Space Station(最小生成树)
    《iOS Human Interface Guidelines》——Popover
    Android在使用WebView时,通过Javascript调用JAVA函数
    Mysql文章笔记
    大量高清文字版PDF编程书籍下载
    Scala函数特性
  • 原文地址:https://www.cnblogs.com/Andy-Li/p/7246050.html
Copyright © 2020-2023  润新知