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

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

    优点:

      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();                    

    输出:

  • 相关阅读:
    线程中测试getName方法和getId方法
    编写一个线程改变窗体的颜色
    创建两个线程分别输出1-100
    输出一个目录中的内容
    file占用字节
    MAP集合选出最大值
    使用增强for循环遍历集合
    数据框中的基本操作
    列表的基本操作
    因子的基本操作
  • 原文地址:https://www.cnblogs.com/Andy-Li/p/6651833.html
Copyright © 2011-2022 走看看