C# 设计模式巩固 - 工厂方法模式

 前言

  实在编不出来了~  

 介绍 - 工厂方法模式

  官方定义:(下面摘自百度百科)工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品;

 实现

  继续上一篇滑板鞋的例子来。^ - ^

  我们知道简单工厂的其中一个缺点就是每加一类产品就需要修改工厂类的方法,我们换一种实现方式,把工厂抽象出来,下面看实现:

  先是鞋子:

  /// <summary>
    /// 鞋子基类
    /// </summary>
    public abstract class Shoes
    {
        public abstract string Name { get; }
    }

    /// <summary>
    /// 凉鞋
    /// </summary>
    public class Sandal : Shoes
    {
        public override string Name
        {
            get
            {
                return "凉鞋";
            }
        }
    }
    /// <summary>
    /// 棉鞋
    /// </summary>
    public class CottonPaddedShoes : Shoes
    {
        public override string Name
        {
            get
            {
                return "棉鞋";
            }
        }
    }

  然后是抽象工厂:

  public abstract class ShoesFactory
    {
      public abstract Shoes Create(); }

  下面我们想生产凉鞋怎么办呢?我们需要创建一个凉鞋的工厂类:

   /// <summary>
    /// 凉鞋工厂类
    /// </summary>
    public class SandalFactory : ShoesFactory
    {
        public override Shoes Create(string shoesType)
        {
            return new Sandal();
        }
    }

  下面请看调用:

  class Program
    {
        static void Main(string[] args)
        {
            //凉鞋厂
            ShoesFactory factory = new SandalFactory();
            //制造鞋子
            Shoes shoes = factory.Create();
            //看看是不是凉鞋
            Console.WriteLine("打开一看是:" + shoes.Name);
            Console.Read();
        }
    }

   假如还想要棉鞋怎么办? - 我们只要再创建个棉鞋厂的类来生产棉鞋就行了。

    /// <summary>
    /// 棉鞋工厂类
    /// </summary>
    public class CottonPaddedShoesFactory : ShoesFactory
    {
        public override Shoes Create()
        {
            return new CottonPaddedShoes();
        }
    }

  调用和凉鞋类似:

class Program
    {
        static void Main(string[] args)
        {
            //凉鞋厂
            ShoesFactory factory = new SandalFactory();
            //制造鞋子
            Shoes shoes = factory.Create();
            //看看是不是凉鞋
            Console.WriteLine("打开一看是:" + shoes.Name);

            Console.WriteLine("我还想要棉鞋...");
            //棉鞋
            ShoesFactory factory1 = new CottonPaddedShoesFactory();
            //制造鞋子
            Shoes shoes1 = factory.Create();
            //看看是不是棉鞋
            Console.WriteLine("打开一看是:" + shoes1.Name);
            Console.Read();

        }
    }

  下面是结果:

  

 分析

   和简单工厂模式比起来我每次增加新的产品时我只需要增加新的工厂和新的类就可以了,而不用修改工厂的方法。这很好的体现了体现了开放闭合原则(OCP)。

   代码更加整洁,维护起来更容易。

   个人觉得每加个产品都要加个产品类和工厂类,时间长了会有大量的类提高了系统的复杂度。

  转载请注明出处:http://www.cnblogs.com/xinwang/p/6344449.html

posted @ 2017-01-23 16:40  CharlesShang  阅读(270)  评论(0编辑  收藏  举报