zoukankan      html  css  js  c++  java
  • 简单工厂模式

      简单工厂模式属于创建新模式,又称静态工厂方法。该模式可以简单的理解为客户通过传入工厂类不同的参数,工厂类返回给客户一个相应的实例化对象,

    此过程中客户不需要关心实例化对象的具体类型与过程,只需要消费实例化后的对象。

      男生大多喜欢车,更希望拥有各种各样的车辆供自己使用,我们就用这个来举一个例子。车子太多了少不了车库,更需要有一个智能车库管家,根据我们

    的出行目的自动的给我们匹配车辆,而我们只需要告诉管家我们的出行目的,管家自动给我们匹配车辆,省去了我们选择车辆的麻烦。

    模式类图:

    首先定义一个我们车的抽象类或者接口MyCar以及子类即我们各种车辆:

     1     /// <summary>
     2     /// 父类:也可使用接口代替
     3     /// </summary>
     4     public abstract class MyCar
     5     {
     6         public abstract void Driving();
     7     }
     8 
     9     /// <summary>
    10     /// 商务车
    11     /// </summary>
    12     public class BusinessCar : MyCar
    13     {
    14         public override void Driving()
    15         {
    16             Console.WriteLine("驾驶商务车");
    17         }
    18 
    19     }
    20 
    21     /// <summary>
    22     /// 越野车
    23     /// </summary>
    24     public class OffroadCar : MyCar
    25     {
    26         public override void Driving()
    27         {
    28             Console.WriteLine("驾驶越野车");
    29         }
    30     }
    31 
    32     /// <summary>
    33     /// 跑车
    34     /// </summary>
    35     public class SportCar : MyCar
    36     {
    37         public override void Driving()
    38         {
    39             Console.WriteLine("驾驶跑车");
    40         }
    41     }
    View Code

    然后根据我们的喜欢定义选择车辆的模式枚举,这里就简单定义三种出行模式,商务、兜风、旅行:

    1     public enum Type
    2     {
    3         Business=1,
    4         Offroad=2,
    5         Sport=3
    6     }
    View Code

    紧接着,我们就要设计我们的车库智能管家了:

     1     public class HousekeeperFactory
     2     {
     3         public MyCar SelectCar(Type type)
     4         {
     5             switch(type)
     6             {
     7                 case Type.Business:
     8                     return new BusinessCar();
     9                 case Type.Offroad:
    10                     return new OffroadCar();
    11                 case Type.Sport:
    12                     return new SportCar();
    13                 default:
    14                     return new SportCar();
    15             }
    16         }
    17     }
    View Code

    而我们在使用车辆的时候只需要选择出行模式即可:

            static void Main(string[] args)
            {
                try
                {
                    MyCar myCar;
                    HousekeeperFactory factory = new HousekeeperFactory();
                    //我要去开会
                    myCar= factory.SelectCar(Type.Business);
                    myCar.Driving();
                    //我要去旅游
                    myCar = factory.SelectCar(Type.Offroad);
                    myCar.Driving();
                    //我要去兜风
                    myCar = factory.SelectCar(Type.Sport);
                    myCar.Driving();
    
                    Console.ReadLine();
    
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
    View Code

    运行输出:

    采用简单工厂模式,主要实现责任的分割:工厂类负责创建对象,客户端只负责消费对象。避免了客户端直接实例化对象,降低了耦合度,同时提高了代码的复用性。

    不过简单工厂模式主要适用于具体的实例化的对象类型少量且已经固定,如果增加新的对象类型就需要修改工厂类并重新编译整个工厂类,这样就违背开闭原则,也就

    造成了简单工厂模式扩展性差的缺点,这个问题我们在下一篇介绍的工厂方法模式解决。

  • 相关阅读:
    MFC 将文件拖进对话框获得文件信息
    微软历史最高市值是多少?
    ZooKeeper的学习与应用
    OutputCache祥解
    本人的微博转移
    java list三种遍历方法性能比較
    VS2010旗舰版安装图解
    SSL协议具体解释
    freemarker字符串拼接
    [java web 入门](一)MyEclipse &amp; HelloWorld 记录
  • 原文地址:https://www.cnblogs.com/ultimateWorld/p/5689340.html
Copyright © 2011-2022 走看看