zoukankan      html  css  js  c++  java
  • 设计模式之——简单工厂模式

          最近在看一些关于设计模式方面的知识,打算把学习过程给记录下来,进一步加深自己的理解。

      从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是实由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

     我是这么理解的:有一个创建工厂它可以生产各种不同的产品,例如:ipad、ipod、iphone、imac种产品(四个类),我们把这四个产品抽象成一个AppleProduct类,然后呢,把这三个产品类分别继承这个基类(AppleProduct)。而工厂类我们创建一个生产产品的方法,通过多态实例化不同的产品子类,从而获取不同生产的产品类型。

    我们先观察简单工厂的UML类图:

        接着就是代码实现了。

    首先创建从产品的通用信息中抽象出基类(AppleProduct):

        /// <summary>
        /// 产品父类
        /// </summary>
        class AppleProduct
        {
            /// <summary>
            /// 产品名称
            /// </summary>
            public string ProductName { get; set; }
    
            /// <summary>
            /// 子类重新的生产方法
            /// </summary>
            /// <returns></returns>
            public virtual string Produce()
            {
                return "Apple Product";
            }
        }

    现在分别创建Iphone、Ipod、Ipad、Imac类

     1   class Imac : AppleProduct
     2     {
     3         public override string Produce()
     4         {
     5             this.ProductName = "Imac";
     6 
     7             return "工厂生产线现在开始生产:" + this.ProductName;
     8         }
     9     }
    10 
    11     class Ipad : AppleProduct
    12     {
    13         public override string Produce()
    14         {
    15             this.ProductName = "Ipad";
    16 
    17             return "工厂生产线现在开始生产:" + this.ProductName;
    18         }
    19     }
    20 
    21     class Iphone : AppleProduct
    22     {
    23         public override string Produce()
    24         {
    25             this.ProductName = "Iphone";
    26 
    27             return "工厂生产线现在开始生产:" + this.ProductName;
    28         }
    29     }
    30 
    31     class Ipod : AppleProduct
    32     {
    33         public override string Produce()
    34         {
    35             this.ProductName = "Ipod";
    36 
    37             return "工厂生产线现在开始生产:" + this.ProductName;
    38         }
    39     }

    现在是最重要的生产工厂类了

     1  /// <summary>
     2     /// 工厂类
     3     /// </summary>
     4     class AppleFactory
     5     {
     6         public static AppleProduct CreateProduct(string productType)
     7         {
     8             AppleProduct product = null;
     9             switch (productType)
    10             {
    11                 case "Iphone":
    12                     product = new Iphone();
    13                     break;
    14                 case "Ipad":
    15                     product = new Ipad();
    16                     break;
    17                 case "Ipod":
    18                     product = new Ipod();
    19                     break;
    20                 case "Imac":
    21                     product = new Imac();
    22                     break;
    23                 default:
    24                     product = new Imac();
    25                     break;
    26             }
    27             return product;
    28         }
    29     }

    运行代码(控制台输出)

     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Console.WriteLine("请输入需要Apple代工工厂生产的产品类型(iphone,imac,ipod,ipad)");
     6             string productName = Console.ReadLine();
     7             AppleProduct productType = AppleFactory.CreateProduct(productName);
     8             Console.WriteLine(productType.Produce());
     9             Console.Read();
    10         }
    11     }

    运行效果:

     总结:

         简单工厂模式的好处在于当我们想要生产新的产品时只需要加一个新产品的类继承产品基类,重写生产产品方法,调用时,工厂根据不同的参数(命令)来返回不同对象的实例,每个产品类都有不同的生产细节和生产方式,调用者不必关注生产产品的细节,只要知道要生产那个产品就行了。缺点就在于关键的工厂类,每增加一种新产品就需要修改工厂类的判断逻辑,不适用复杂的生产环境。同时使用简单工厂模式不利于系统的拓展,所以只能适用于一些比较简单环境下使用。

    猛击下载:示例程序

    作者:晴天猪

    出处:http://www.cnblogs.com/IPrograming 

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/IPrograming/p/SimpleFactory.html
Copyright © 2011-2022 走看看