zoukankan      html  css  js  c++  java
  • 简单实现建造者模式

    建造者模式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();
        }
    }

    测试结果

  • 相关阅读:
    IntelliJ Idea的黑色主题+代码高亮
    @EqualsAndHashCode
    @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
    springcloud各种网址
    利用PowerDesigner连接Mysql数据库并逆向所有表关系图【两种方式】
    Java 异步实现的几种方式
    如何查看Linux操作系统版本
    Java中关于WeakReference和WeakHashMap的理解
    Java弱引用(WeakReference)的理解与使用
    Unchecked Exception 和 Checked Exception 比较
  • 原文地址:https://www.cnblogs.com/detective-blog/p/4942524.html
Copyright © 2011-2022 走看看