23种设计模式-02-简单工厂模式

public abstract class Food
    {
        public abstract void Make();
    }
    
    public class Patato : Food
    {
        public override void Make()
        {
            Console.WriteLine("土豆做好了!");
        }
    }
    
    public class TomatoWithEggs:Food
    {
        public override void Make()
        {
            Console.WriteLine("西红柿炒蛋做好了!");
        }
    }
    
    public class Chicken : Food
    {
        public override void Make()
        {
            Console.WriteLine("鸡肉做好了!");
        }
    }
public class Customer
    {
        public static Food MakeFood(FoodType foodType)
        {
            Food food = null;
            if (foodType == FoodType.Patato)
            {
                food = new Patato();
            }
            else if (foodType == FoodType.TomatoWithEggs)
            {
                food = new TomatoWithEggs();
            }
            else if (foodType == FoodType.Chicken)
            {
                food = new Chicken();
            }
            return food;
        }
    }
public class SimpleFactory
    {
        public static Food MakeFood(FoodType foodType)
        {
            Food food = null;
            if (foodType == FoodType.Patato)
            {
                food = new Patato();
            }
            else if (foodType == FoodType.TomatoWithEggs)
            {
                food = new TomatoWithEggs();
            }
            else if (foodType == FoodType.Chicken)
            {
                food = new Chicken();
            }
            return food;
        }
    }

    public enum FoodType
    {
        Patato, TomatoWithEggs, Chicken
    }
class Program
    {
        /// <summary>
        /// 模拟使用简单工厂的场景介绍:
        /// 比如吃饭,想要吃什么菜都得自己去炒,我自己得全方位照顾到,这是单纯的需要什么去做什么
        /// 使用简单工厂的思路就是:
        /// 我要吃饭,我去饭馆吃,我想要吃什么我点菜,饭馆给我做就好了,至于怎么做是饭馆的事(此时饭馆就相当于简单工厂)
        /// 相当于把做饭的细节从我身上推迟给饭馆
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            try
            {
                //TestNormal();
                TestSimpleFactory();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error:" + e.Message);
            }
            Console.WriteLine("End");
            Console.ReadKey();
        }

        private static void TestNormal()
        {
            //不使用简单工厂,都是顾客自己来
            //所有的业务代码(如何做饭)都写在顾客类中,导致程序耦合性变高,扩展性变低
            var food1 = Customer.MakeFood(FoodType.Patato);
            food1.Make();
            var food2 = Customer.MakeFood(FoodType.Chicken);
            food2.Make();
            var food3 = Customer.MakeFood(FoodType.TomatoWithEggs);
            food3.Make();
        }

        private static void TestSimpleFactory()
        {
            //使用简单工厂,客户直接去点菜就可以(自己不用操心如何做菜)
            //后续扩展直接实现抽象类就可以,低耦合,易扩展
            var food1 = SimpleFactory.MakeFood(FoodType.Patato);
            food1.Make();
            var food2 = SimpleFactory.MakeFood(FoodType.Chicken);
            food2.Make();
            var food3 = SimpleFactory.MakeFood(FoodType.TomatoWithEggs);
            food3.Make();
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值