【设计模式】——简单工厂模式

感受设计演变过程中所蕴含的大智慧,体会乐于怒的程序人生中值得回味的一幕幕。这是《设计模式——菜鸟天书》——简单工厂类

 

大鸟简单工厂模式解释:

简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

 

小菜简单工厂模式的UML图:

简单工厂模式中包含的角色及其相应的职责:

工厂角色(Creator:这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

抽象(Product)产品角色:简单工厂模式创建的所有对象的父类,注意,这里的父类可以使接口也可以使抽象类,它负责描述所有实例所共有的公共接口。

具体产品(ConcreteProduct)角色:简单工厂创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

小菜面试受挫,大鸟的代码无错就是优一语惊醒梦中人,小菜对计算器实现的UML 图记忆尤深,如下。


简单工厂场景分析:

请教归请教,饭还是要吃的,两单身汉一个是不会做饭,一个是做饭不好吃,随后小菜说:“鸟哥,饿了……咱去吃饭吧”

大鸟:“肯德基离我家比近,样式也比较多,带你去吃肯德基吧”

一听要吃肯德基,小菜顿时乐开了花。

话说,小菜正吃劲头时,大鸟问:“小菜,生活来源于发现。肯德基就是一个工厂模式。”

小菜,咬一口鸡腿,应答:“恩滴……”涛涛不绝,大概意思,如下图:


吃完饭回家后,兴奋的小菜,三下五除的写了段代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 简单工厂模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Food  oper;
            oper = FoodFactory.createOperate("汉堡");
            
            Console.WriteLine (oper .Getfood ());
        }
        public class Food              //声明食物抽象类
        {
            
            public virtual string   Getfood()
            {
                string foodname = null;
                return foodname ;
            }
        }
        class Hamburger : Food         //汉堡派生类,继承基类
        {
            public override string  Getfood()   
            {
                string foodname = "汉堡";
                return foodname;
            }
        }
        class FrenchFries: Food          //薯条派生类,继承基类
         {
             public override string  Getfood()
             {
                 string foodname ="薯条";
                 return foodname ;
             }

         }       

        class CocaCola:Food           //可乐派生类,Override基类
        {
            public override string  Getfood()
            {
                string foodname = "可乐";
                return foodname ;
            }
        }

        class drumstick : Food            //鸡腿派生类,重写基类
        {
            public override string  Getfood()  
            {
                string foodname = "鸡腿";
                return foodname ;
 
            }
        }

        public class FoodFactory           //食物简单工厂类
        {
            public static Food  createOperate(string foodname)
            {
                Food  oper = null;
                switch (foodname  )
                {
                    case "汉堡":
                        oper = new Hamburger();
                        break;
                    case "薯条":
                        oper = new FrenchFries();
                        break ;
                    case "可乐":
                        oper = new CocaCola();
                        break;
                    case "鸡腿":
                        oper = new drumstick();
                        break;

                }
                return oper;
            }
            
            
        }

      
        
               
       
    }
}

哈哈……幸福就是自己想吃的能 吃到:


旁白概述简单工厂:

优点:

1.简单,容易实现,工厂是简单工厂的核心,必须包含有必要的逻辑判断。

2. 在一定程度上将产品的消费同产品的生产隔离

 

缺点:

1.有限程度的支持“开-闭”原则,从上面的例子可以看到如果需要增加一个具体产品,代码的修改是比较多的,工厂类的生产方法要添加新的逻辑判断。

2.系统的后续扩展性比较差。系统所有逻辑判断都集中到工厂类,增大了系统风险的严重性。因为工厂是整个模式的核心,如果该工厂停止工作,整个模式将处于崩溃。而且工厂类承担了所有的生产工作,形成了一个无所不知的“全能类”。

3.工厂类生产产品的方法一般是静态方法,静态方法不能为子类所继承,无法形成等级继承关系。


《设计模式——菜鸟天书》更新中……


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值