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

    工厂模式与简单工厂模式非常相似。

    可以看出简单工厂模式,如果有添加一个新的实体类,那么就需要去修改工厂类中的方法,增加一个对应的语句来输出对应的对象。这样就违背了开放封闭的原则。

    工厂模式就是为了解决这个问题。

    抽象一个工厂接口,对应的一种实体类那么就有对应的一个实体工厂。通过这样的方式,那么就避免了去修改原有的代码。

    假设有一家工厂可以生产奔驰车和奥迪车,那么我们看看类图

    先看看类图

    很容易看出其中的关系,如果现在要增加一个BMW,那么只需要增加一个BMW的实体类以及BMWFactory就可以了。

    这样实现了对扩展的开放已经对于修改的封闭

     interface IFactory
        {
            ICar CreateCar();
        }
    
     class BenzFactory:IFactory
        {
            #region IFactory 成员
    
            public ICar CreateCar()
            {
                return new Benz();
            }
    
            #endregion
        }
    
      class AudiFactory :IFactory
        {
            #region IFactory 成员
    
            public ICar CreateCar()
            {
               return new Audi();
            }
    
            #endregion
        }
    interface ICar
        {
            void Run();
        }
    
     class Audi:ICar
        {
            #region ICar 成员
    
            public void Run()
            {
               Console.WriteLine("Audi Run");
            }
    
            #endregion
        }
    
     class Benz:ICar
        {
            #region ICar 成员
    
            public void Run()
            {
              Console.WriteLine("Benz Run");
            }
    
            #endregion
        }
     internal class Program
        {
            private static void Main(string[] args)
            {
                //读取配置信息
                var factoryName = ConfigurationManager.AppSettings["factoryName"];
                //通过反射生成对象
                var factory = (IFactory)Assembly.Load("FactoryPattern").CreateInstance("FactoryPattern." + factoryName);
                //运行方法
                if (factory != null) factory.CreateCar().Run();
                //查看结果
                Console.ReadLine();
            }
        }

    这里运行的时候做了一个小小的把戏,通过读取配置文件的信息再通过反射的机制在运行时生成对象获取结果。

    这样只需要改变配置就好了。

  • 相关阅读:
    职业生涯步步高:一位资深经理人的职业生涯感悟
    HDU2082解题报告
    How the brain recognizes objects
    学习"图"(最短路径)算法
    HDOJ1022解题报告
    【转】受用的十条经验哈
    Archive for the 'TED' Category TED视频:Tan Le 能读懂脑电波的耳机
    WiFi 802.11ac驱动无线家庭高清影院
    asp.net后台编写 loading效果
    c#字符串分割
  • 原文地址:https://www.cnblogs.com/XzcBlog/p/4538826.html
Copyright © 2011-2022 走看看