• 设计模式:工厂方法


    在简单工厂模式中,将实例化对象的工作推迟到了专门负责创建对象的工厂类中,可以根据我们预知动态创建产品类。但是,一旦客户的变化超过预知我们就必须修改我们的源代码(FoodShop工厂)了。
    
    switch (foodName) 
    { 
        case "Sugar": 
            return new Sugar();                     
        case "Bread": 
            return new Bread(); 
        default: 
            throw new ArgumentException();                     
    } 
     
    
    如何不修改工厂呢,我们这样想,我们去食品专卖店去买,到专门卖糖果的地方买糖果,专门卖面包的地方买面包,当需要买饼干时,增加一个饼干专卖店即可,不用修改工厂
    namespace DP 
    { 
        class Client 
        { 
            static void Main(string[] args) 
            { 
                // 可以从配置文件里确定具体工厂 
                // IFoodshop factory = (IFoodshop)Assembly.Load("DP"). 
                //                     CreateInstance("SugarShop"); 
                IFoodshop sugarShop = new SugarShop(); 
      
                IFood food = sugarShop.CreateFood(); 
                food.Eat(); 
                Console.Read(); 
            } 
        } 
      
        // 抽象产品 
        public interface IFood 
        { 
            void Eat(); 
        } 
      
        // 具体产品 
        public class Bread : IFood 
        { 
      
            public void Eat() 
            { 
                Console.WriteLine("Bread is delicious!"); 
            } 
        } 
      
        // 具体产品 
        public class Sugar : IFood 
        { 
      
            public void Eat() 
            { 
                Console.WriteLine("Sugar is delicious!"); 
            } 
        } 
      
        // 抽象工厂 
        public interface IFoodshop 
        { 
            IFood CreateFood(); 
              
        } 
      
        // 具体工厂 
        public class SugarShop : IFoodshop 
        { 
            public IFood CreateFood() 
            { 
                return new Sugar(); 
            } 
             
        } 
      
        // 具体工厂 
        public class BreadShop : IFoodshop 
        { 
            public IFood CreateFood() 
            { 
                return new Bread(); 
            } 
      
        } 
          
    } 
    当增加一种食品时,我们只需要创建一个实现IFood的食品和一个实现了IFactory的具体工厂类即可,避免了修改类。
  • 相关阅读:
    HTML5你必须知道的28个新特性
    localStorage使用总结
    Oracle分页查询排序数据重复问题
    servlet,RMI,webservice之间的区别
    远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
    几种通讯协议的比较
    http、TCP/IP协议与socket之间的区别
    Oracle修改序列(Sequence)起始值问题
    mybatis开启二级缓存小记
    使用canvas绘制渐变色矩形和使用按键控制人物移动
  • 原文地址:https://www.cnblogs.com/profession/p/5073050.html
Copyright © 2020-2023  润新知