首页 > 代码库 > 工厂模式

工厂模式

简单工作模式
面向对象核心思想:封装变化。
 
个人解释:简单工厂模式,也就是建一个类的工厂类,去生产我们需要的类。
 
例子:我中午吃饭。我经常吃的有两种麦当劳和沙县。如果没有外卖(工厂类)。那我就要必要,想吃什么跑到那个店里买什么(生产类)。现在有工厂(外卖)类负责生产,我就可以直接在公司买了,然后等着吃。
没有工厂类的时候
    class Program
    {
        static void Main(string[] args)
        {
            
            //想吃沙县,跑到沙县餐厅去买
            Shaxin shaxin=new Shaxin();
            Console.WriteLine(shaxin.Buy());
            //想吃麦当劳,跑到麦当劳餐厅去买
            MacDonald macDonald = new MacDonald();
            Console.WriteLine(macDonald.Buy());
            Console.ReadLine();
        }
    }
    /// <summary>
    /// 沙县餐馆
    /// </summary>
    public class Shaxin
    {
        public string Buy(){return "飘香拌面!";}
    }
    /// <summary>
    /// 麦当劳餐厅
    /// </summary>
    public class MacDonald
    {
        public string Buy() { return "麦辣鸡腿包套餐!"; }
    }

下面使用工厂类实现

  class Program
    {
        static void Main(string[] args)
        {
           
            //使用工厂类,想要什么类直接用工厂生产
            //想吃沙县,跑到沙县餐厅去买
            Restaurant restaurant = RestaurantSimpleFactory.CreateRestaurant("沙县");
            Console.WriteLine(restaurant.Buy());
            //想吃麦当劳,跑到麦当劳餐厅去买
            restaurant = RestaurantSimpleFactory.CreateRestaurant("麦当劳");
            Console.WriteLine(restaurant.Buy());
            Console.ReadLine();
        }
    }

    /// <summary>
    /// 抽象出餐馆类
    /// </summary>
    public abstract class Restaurant
    {
        public abstract string Buy();
    }
    /// <summary>
    /// 沙县餐馆
    /// </summary>
    public class Shaxin:Restaurant
    {
        public override string Buy(){return "飘香拌面!";}
    }
    /// <summary>
    /// 麦当劳餐厅
    /// </summary>
    public class MacDonald:Restaurant
    {
        public override string Buy() { return "麦辣鸡腿包套餐!"; }
    }

    /// <summary>
    /// 简单工厂,根据用户选择的餐馆去买饭
    /// </summary>
    public  class RestaurantSimpleFactory
    {
        public  static Restaurant CreateRestaurant(string type)
        {
            Restaurant restaurant = null;
            switch (type)
            {
                case "沙县" :restaurant= new Shaxin();break;

                case "麦当劳": restaurant=new MacDonald();break;
            }
            return restaurant;
        }
    }

简单工厂的有点和缺点

优点:1.实现了客户和生产的分离。客户不在关心生产。客户只关心消费就可以了。

         2.因为客户和生产的分离,客户端消费代码,可以复制满足不同消费者的需求。

缺点:1.要生成的产品必须是有限的,而且明确的。

        2.简单工厂实现了,生产者和消费者的分离,单这一切都是有代理类完成的。如果增加新的产品,还需要修改代理类。和增加新的产品类。如果代理类,挂了,整个客户端就不能使用了。

简单工厂模式存在明显的缺点。下面介绍 工厂方法,解决可以简单工厂模式的问题。

工厂方法

 

工厂模式