C# 设计模式巩固 - 简单工厂模式

 前言

  设计模式的文章很多、鄙人不才文笔也不咋地。写这篇只为巩固下基础知识,万一不小心帮到了您,是我莫大的荣幸!写的不好欢迎码友指正,废话结束开始进入正题。

 介绍 - 简单工厂模式

  官方定义:(尴尬~貌似没啥官方定义,下面摘自百度百科)简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

  通俗定义:就是用一个工厂(类)来创建对象。

 实现

  示例:假如你想在某宝上找到一个可以定做鞋子的厂家,现在是夏天你想订做一双你专属的滑板鞋(yeah!,摩擦摩擦...)。过了半年后到了冬天,你又想订做一双棉鞋。

  类图:

 

 

  代码:

/// <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 "棉鞋";
            }
        }
    }
    /// <summary>
    /// 某淘鞋子工厂
    /// </summary>
    public class ShoesFactory
    {
        public static Shoes Create(string shoesType)
        {
            if(shoesType == "凉鞋")
            {
                return new Sandal();
            }
            else if(shoesType == "棉鞋")
            {
                return new CottonPaddedShoes();
            }
            throw new Exception(string.Format("我们厂家不生产{0}",shoesType));
        }
    }

  调用:

class Program
    {
        static void Main(string[] args)
        {
            //我要凉鞋
            Console.WriteLine("我要凉鞋");
            Console.WriteLine("正在生产凉鞋...");
            //第一双鞋子
            Shoes shoes1 = ShoesFactory.Create("凉鞋");
            Console.WriteLine("鞋子生产完毕!");
            //看看是什么鞋
            Console.WriteLine("鞋子的名称是:{0}",shoes1.Name);

            Console.WriteLine("正在生产棉鞋...");
            //第二双鞋子
            Shoes shoes2 = ShoesFactory.Create("棉鞋");
            Console.WriteLine("鞋子生产完毕!");
            //看看是什么鞋
            Console.WriteLine("鞋子的名称是:{0}", shoes2.Name);
            Console.Read();
        }
    }

    结果:

  

 分析

  优点: 参照上面的例子来说,我们需要什么鞋子直接告诉工厂就可以了不必关心鞋子是怎么做出来的,做出来的什么类型的。客户端不直接依赖于具体对象,更加灵活。

  缺点:还是继续上面的例子,假如现在我想要一双滑板鞋怎么办?假如工厂想要实现的话就必须去修改工厂类,假如我还要一双足球鞋、一双篮球鞋、一双跑步鞋等等。那么这个工厂类将变的异常的复杂和庞大难以维护。

   欢迎批评指正,转载请注明出处 http://www.cnblogs.com/xinwang/p/6308622.html

 

posted @ 2017-01-19 19:55  CharlesShang  阅读(147)  评论(0编辑  收藏  举报