zoukankan      html  css  js  c++  java
  • 设计模式系列——简单工厂模式

             简单工厂模式是我们接触设计模式时接触到的最基本的一个设计模式。我们在写一个程序的时候,可能会涉及到一些类 ,用户使用时到底去实例化哪一个类,这是简单工厂所解决的问题。

             这个问题需要我们写一个逻辑的判断去实现它,比如说:我们设计一个饭店的程序,其中有食品供客户选择,如豆腐脑。

             饭店里有厨师,厨师在收到信息后会做菜。而且每个厨师只会做一道菜。(如下图所示)

             

             豆腐脑在刚开始的时候是没有实际存在的,只是写在了菜单上,当客户点完菜后,才让厨师做菜,再让厨师去做。

             而有的饭店有很多的菜品,这些菜品都放在菜单(类)里面,当用户点完餐后,服务员需要知道每个菜品相对应的厨师是那个人,然后由服务员判断让哪个厨师做菜。

             

             

             这时,假如这个服务员请假了的话,那么整个饭店都会出现问题。这不是我们所希望的。于是,我们给这个饭店加了个这样的职位——厨师选择人员,在他那里有个表格,我们的服务员拿着客户点的菜给他,他通过表格确定这道菜应该由哪个厨师去做,然后由他将做饭这个消息传达给厨师,厨师进行操作。

             

             这样,增加了后厨通知人员后,服务员来不了的话就不再影响我们的饭店的正常运行了,这就是增加了系统的稳定性,还有当我们增加新的菜品的时候,只需要在后厨选择人员处和菜单上加上新的菜品就可以了,服务员不会受到影响,我们的可扩展性也得到了加强。

             这就是简单工厂模式——到底要吃什么?你问我就可以了。一下是类似的代码:

             

        class Program
        {
            static void Main(string[] args)
            {
                //将菜单交给用户
                Console.WriteLine("请输入您要吃啥?我们有豆腐脑、炒鸡蛋、炒豆角供您选择!!");
                //用户选择需要的菜品
                string greens="";
                greens = Console.ReadLine ();
    
    
                chef Chef;
                //调用后厨选择人员选择厨师
                Chef = greensoptionfactory .getchef (greens );
                //得到食物
                string result = Chef.getfood;
                Console.WriteLine("先生您好,这是您的:{0}!",result);
    
            }
        }
        public class greensoptionfactory
        { 
            //选择厨师
            public static chef getchef(  string greens )
            {
                chef Chef = null ;
                switch (greens)
                {
                    case "豆腐脑":
                        Chef = new   cheftofu();
                        break;
                    case "炒鸡蛋":
                        Chef = new chefegg();
                        break;
                    case "炒豆角":
                        Chef = new chefbean();
                        break;
                }
                //将厨师输出
                return Chef;
            }
           
        }
        //定义厨师类
        public class chef
        {
            private string food = "";
            //厨师的做菜方法
            public virtual string getfood
            {
    
                get
                {
                    return food;
                }
            }
        }
        //做豆腐脑的厨师
        public class cheftofu : chef
        {
            public override string getfood
            {
                get
                {
                    return "豆腐脑";
                }
              
            }
        }
        //炒豆角的厨师
        public class chefbean : chef
        {
            public override string getfood
            {
                get
                {
                    return "炒豆角";
                }
            }
        }
        //炒鸡蛋的厨师
        public class chefegg : chef
        {
            public override string getfood
            {
                get
                {
                    return "炒鸡蛋";
                }
            }
        }
    }
    
             

             

  • 相关阅读:
    VB.net和c#利用IOleCommandTarget接口实现Html编辑器的Glyphs(原创)
    vb.net中用com通讯实现对HTMLDocument的事件捕捉(原创)
    自己写的用JS脚本定时执行Web地址并且得到它的源代码的页面程序
    Alice:曾经的CS反恐精英顶尖高手
    .net利用IOleCommandTarget接口实现Html编辑器表格边框的显示和隐藏(原创)
    ASP用语法及函数
    最近在研究质量统计与分析方面的项目开发
    propertyGrid实现选项(原创)
    .Net平台AOP技术研究
    c# propertyGrid属性控件跟Htmlelement元素绑定(原创精华)
  • 原文地址:https://www.cnblogs.com/liyasong/p/6387884.html
Copyright © 2011-2022 走看看