简单工厂模式

Posted Andy·Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式相关的知识,希望对你有一定的参考价值。

定义:可以理解为负责生产对象的一个类。

优点:

  a.解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品。实现了对责任的分割;

  b.起到了代码复用的作用。

缺点:

  a.工厂类中集中了所有产品的创建逻辑,一旦不能正常工作,整个系统都会受到影响;

  b.系统扩展困难,一旦添加新的产品就不得不修改工厂逻辑,这样就会造成工厂逻辑过于复杂。

适用场景:

  a.当工厂类创建的类比较少时可以考虑使用简单工厂模式;

  b.客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时可以考虑使用简单工厂模式。

 

关键点:一个抽象基类、多个产品子类、一个工厂方法,客户端通过传递给工厂方法参数来获取具体的产品进行消费。

示例:

 public abstract class Transportation
    {
        public abstract string GetType();

    }


    #region 具体操作,子类。

    //坐地铁上班
    public class ByMetro : Transportation
    {
        public override string GetType()
        {
            return "坐地铁";
        }
    }

    //骑OFO上班
    public class ByOfo : Transportation
    {
        public override string GetType()
        {
            return "骑OFO";
        }

    }

    //徒步上班
    public class OnFoot : Transportation
    {
        public override string GetType()
        {
            return "开11号";
        }
    }

    #endregion


    //工厂类
    public class TransportationFactory
    {
        public static Transportation CreateTransportation(string transType)
        {
            Transportation transportation = null;
            if (transType.Equals("地铁"))
            {
                transportation = new ByMetro();
            }
            else if (transType.Equals("OFO"))
            {
                transportation = new ByOfo();
            }
            else if (transType.Equals("走路"))
            {
                transportation = new OnFoot();
            }
            return transportation;
        }
    }

调用:

            Console.WriteLine("【简单工厂模式】");
            Console.WriteLine();
            Console.WriteLine("出行方式:");
            Console.WriteLine();
            Transportation tf1 = TransportationFactory.CreateTransportation("地铁");
            Console.WriteLine(tf1.GetType());
            Console.WriteLine();
            Transportation tf2 = TransportationFactory.CreateTransportation("OFO");
            Console.WriteLine(tf2.GetType());
            Console.WriteLine();
            Transportation tf3 = TransportationFactory.CreateTransportation("走路");
            Console.WriteLine(tf3.GetType());
            Console.ReadLine();                    

输出:

 

以上是关于简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

PHP面向对象之选择工厂和更新工厂

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式之简单工厂模式

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)