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

    引用:简单工厂模式,存在扩展困难的的问题。这里介绍工厂方法模式

    工厂方法模式定义

      工厂不在负责对象的创建,而是定义了接口,实现必须要完成的工作。具体对象的创建,有对象子类完成的子类完成。这样扩展新的产品的时候,只要实现工作,并建立实现子类,即可扩展。

     class Program
        {
            static void Main(string[] args)
            {
                
                /*
                //使用工厂类,想要什么类直接用工厂生产
                //想吃沙县,跑到沙县餐厅去买
                Restaurant restaurant = RestaurantSimpleFactory.CreateRestaurant("沙县");
                Console.WriteLine(restaurant.Buy());
                //想吃麦当劳,跑到麦当劳餐厅去买
                restaurant = RestaurantSimpleFactory.CreateRestaurant("麦当劳");
                Console.WriteLine(restaurant.Buy());
                */
                //工厂方法
                ShaxinFactory shaxinFactory=new ShaxinFactory();
                Restaurant restaurant = shaxinFactory.CreateRestaurantFactory();
                Console.WriteLine(restaurant.Buy());
    
                //麦当劳实现
                MacDonaldFactory macDonaldFactory=new MacDonaldFactory();
                Restaurant restaurant1 = macDonaldFactory.CreateRestaurantFactory();
                Console.WriteLine(restaurant1.Buy());
    
                Console.ReadLine();
            }
        }
    
        /// <summary>
        /// 抽象出餐馆类
        /// </summary>
        public abstract class Restaurant
        {
            public abstract string Buy();
        }
    
        /// <summary>
        /// 抽象工厂
        /// </summary>
        public abstract class Creator
        {
            public abstract Restaurant CreateRestaurantFactory();
        }
    
        /// <summary>
        /// 沙县餐馆
        /// </summary>
        public class Shaxin:Restaurant
        {
            public override string Buy(){return "飘香拌面!";}
        }
        /// <summary>
        /// 沙县抽象工厂
        /// </summary>
        public class ShaxinFactory:Creator
        {
            /// <summary>
            /// 实现抽象工厂
            /// </summary>
            /// <returns></returns>
            public override Restaurant CreateRestaurantFactory()
            {
                return new Shaxin();
            }
        }
        /// <summary>
        /// 麦当劳餐厅
        /// </summary>
        public class MacDonald:Restaurant
        {
            public override string Buy() { return "麦辣鸡腿包套餐!"; }
        }
    
        /// <summary>
        /// 麦当劳抽象类
        /// </summary>
        public class MacDonaldFactory : Creator
        {
    
            public override Restaurant CreateRestaurantFactory()
            {
                return new MacDonald();
            }
        }
        /// <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;
            }
        }

    这里如果,要在添加新的产品,就不用修改原来的代码。直接添加类,和创建产品子类(继承创建产品的抽象工厂类)。

    这里创建对象的抽象工厂类,可以使用单例模式,这样就进一步提高了效率。

  • 相关阅读:
    python全栈开发_day48_bootstrap
    python全栈开发_day47_js,jQuery
    python全栈开发_day46_html文本标签
    抽象集合
    ViewState的用法
    sql(join中on与where区别)
    微软的技术文档链接地址
    微软的帮助文档,详细的介绍VS开发工具的使用
    [摘录]解决C# DateTime去掉时分秒几种方法
    验证(摘录)
  • 原文地址:https://www.cnblogs.com/Blogs-Wang/p/6402761.html
Copyright © 2011-2022 走看看