• 简单实现建造者模式


    建造者模式UML类图:

    MealBuilder(建造者接口)

    interface MealBuilder
        {
            void BuildBurger();
            void BuildChicken();
            void BuildDrink();
            Meal GetMeal();
        }

    KFCBuilder(具体建造者A)

    public class KFCBuilder:MealBuilder
    {
        protected Meal meal=new Meal();
        public void BuildBurger()
        {
            Food food = new KFC_Burger();
            meal.AddFood(food);
        }
        public void BuildChicken()
        {
            Food food = new KFC_Chicken();
            meal.AddFood(food);
        }
        public void BuildDrink()
        {
            Food food = new KFC_Drink();
            meal.AddFood(food);
        }
        public Meal GetMeal()
        {
            return meal;
        }
    }

    McDonaldsBuilder(具体建造者B)

    public class McDonaldsBuilder:MealBuilder
    {
        protected Meal meal=new Meal();
        public void BuildBurger()
        {
            Food food = new McDonalds_Burger();
            meal.AddFood(food);
        }
        public void BuildChicken()
        {
            Food food = new McDonalds_Chicken();
            meal.AddFood(food);
        }
        public void BuildDrink()
        {
            Food food = new McDonalds_Drink();
            meal.AddFood(food);
        }
        public Meal GetMeal()
        {
            return meal;
        }
    }

    Director(指挥者)

    class Director
    {
        private MealBuilder builder;
        public Director(MealBuilder builder)
        {
            this.builder = builder;
        }
        public Meal BuildMeal()
        {
            this.builder.BuildBurger();
            this.builder.BuildChicken();
            this.builder.BuildDrink();
            return this.builder.GetMeal();
        }
    }

    Meal(具体产品类)

    public class Meal
    {
        private  List<Food> foodList=new List<Food>();
        public void AddFood(Food food)
        {
            this.foodList.Add(food);
        }
        public void show()
        {
            foreach (Food element in foodList)
            {
                element.deal();
            }
        } 
    }

    Food(‘零件’接口)

    public interface Food
    {
        void deal();
    }

    KFC_Burger(产品‘零件‘partA1)

    public class KFC_Burger:Food
    {
        public void deal()
        {
            Console.WriteLine("您的KFC汉堡");
        }
    }

    KFC_Chicken(产品‘零件‘partA2)

    public class KFC_Chicken:Food
    {
        public void deal()
        {
            Console.WriteLine("您的KFC炸鸡");
        }
    }

    KFC_Drink(产品‘零件‘partA3)

    public class KFC_Drink:Food
    {
         public void deal()
         {
             Console.WriteLine("您的KFC饮料");
         }
    }

    McDonalds_Burger(产品‘零件‘partB1)

    public class McDonalds_Burger:Food
    {
        public void deal()
        {
            Console.WriteLine("您的麦当劳汉堡");
        }
    }

    McDonalds_Chicken(产品‘零件‘partB2)

    public class McDonalds_Chicken:Food
    {
        public void deal()
        {
            Console.WriteLine("您的麦当劳炸鸡");
        }
    }

    McDonalds_Drink(产品‘零件‘partB3)

    public class McDonalds_Drink:Food
    {
        public void deal()
        {
            Console.WriteLine("您的麦当劳饮料");
        }
    }

    Client(测试类)

    class Client
    {
        static void Main(string[] args)
        {
            MealBuilder b1 = new KFCBuilder();
            Director d1 = new Director(b1);
            Meal meal1 = d1.BuildMeal();
            meal1.show();
    
            MealBuilder b2 = new McDonaldsBuilder();
            Director d2 = new Director(b2);
            Meal meal2 = d2.BuildMeal();
            meal2.show();
            Console.Read();
        }
    }

    测试结果

  • 相关阅读:
    单词统计-续
    “帮你APP”团队冲刺10
    软件工程周总结15
    梦断代码阅读笔记03
    个人课程总结
    梦断代码阅读笔记02
    梦断代码阅读笔记01
    软件工程周总结14
    计算最长英语单词链
    软件工程周总结13
  • 原文地址:https://www.cnblogs.com/detective-blog/p/4942524.html
Copyright © 2020-2023  润新知