zoukankan      html  css  js  c++  java
  • 设计模式:工厂方法

    在简单工厂模式中,将实例化对象的工作推迟到了专门负责创建对象的工厂类中,可以根据我们预知动态创建产品类。但是,一旦客户的变化超过预知我们就必须修改我们的源代码(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的具体工厂类即可,避免了修改类。
  • 相关阅读:
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    dialog窗口也能刷新
    js验证数字及操作备份
    工具类
    查询结果设置背景色
    decmain主体类经典保存备份
    jquery操作备份
  • 原文地址:https://www.cnblogs.com/profession/p/5073050.html
Copyright © 2011-2022 走看看