建造者模式案例

作者: 死磕自己 | 来源:发表于2018-04-10 14:28 被阅读29次

    [TOC]

    建造者解析》

    例子

    我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮
    
    (Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger)
    
    ,它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是
    
    装在瓶子中。
    我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个
    
    表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中
    
    。
    然后我们创建一个 Meal 类,带有 Item 的 ArrayList 和一个通过结合 Item 来创建不同类型的 Meal 
    
    对象的 MealBuilder。BuilderPatternDemo,我们的演示类使用 MealBuilder 来创建一个 Meal。
    
    
    

    分析

    分析:
        分为两种 ,一种是汉堡 、一种是冷饮 
        汉堡又分为 : 素食汉堡  、 鸡肉汉堡  这些都包装在盒子中
        冷饮又分为: 可口可乐  、 百事可乐  这些放在瓶子中
    

    步骤

    1、创建 :食物条目类Item{名称 、 包装 、 价格 、}和食物包装pack的接口;

    Item

    package Builder;
    
    /**
     * 食物条目
     * @author Administrator
     *
     */
    public interface Iteam {
        
        /**
         * 名称
         * @return
         */
        public String name();
        
        
        /**
         * 包裹
         * @return
         */
        public  Packing packing();
        
        /**
         * 价格
         * @return
         */
        public float price();
        
    }
    
    

    Packing

    package Builder;
    
    public interface Packing {
    
        /**
         * 
         * @return
         */
        public  String pack();
    }
    
    

    2、实现包装pack接口的两个类: 盒子Wrapper 、瓶子Bottle

    Wrapper

    package Builder;
    
    public class Wrapper  implements Packing{
    
        @Override
        public String pack() {
            
            return "Wrapper";
        }
        
    
    }
    
    

    Bottle

    package Builder;
    
    public class Bottle implements Packing{
    
        @Override
        public String pack() {
            return "Bottle";
        }
    
    }
    
    

    3、实现 食物条目Item接口的类: 汉堡Burger、 冷饮ColdDrink

    Burger

    package Builder;
    
    public abstract class Burger implements Iteam{
    
    
    
        @Override
        public Packing packing() {
            // TODO Auto-generated method stub
            return new Wrapper();
        }
    
        @Override
        public abstract float price();
    
    }
    
    

    ColdDrink

    package Builder;
    
    public abstract class ColdDrink implements Iteam{
        
        @Override
        public Packing packing() {
            return new Bottle();
        }
    
        @Override
        public abstract float price();
    }
    
    

    4、创建 汉堡 和 冷饮 的具体类 : 素食汉堡 VegBurger 、 鸡肉汉堡ChickenBurger、可
    口可乐coke、百事可乐Pepsi

    VegBurger类

    package Builder;
    
    public class VegBurger extends Burger{
    
        @Override
        public String name() {
            // TODO Auto-generated method stub
            return "Veg Burger";
        }
    
        @Override
        public float price() {
            // TODO Auto-generated method stub
            return 25.0f;
        }
    
    }
    
    

    ChickenBurger类

    package Builder;
    
    public class ChickenBurger extends Burger{
    
        @Override
        public String name() {
            // TODO Auto-generated method stub
            return "Chicken Burger";
        }
    
        @Override
        public float price() {
            // TODO Auto-generated method stub
            return 45.0f;
        }
    
    }
    
    

    Pepsi类

    package Builder;
    
    public class Pepsi extends ColdDrink{
    
        @Override
        public String name() {
            // TODO Auto-generated method stub
            return "Pepsi";
        }
    
        @Override
        public float price() {
            // TODO Auto-generated method stub
            return 35.0f;
        }
    
        
    }
    
    

    coke类

    package Builder;
    
    public class Coke extends ColdDrink{
    
        @Override
        public String name() {
            // TODO Auto-generated method stub
            return "Coke";
        }
    
        @Override
        public float price() {
            // TODO Auto-generated method stub
            return 30.0f;
        }
    
        
    }
    
    

    5、创建 Meal 类 、对Item中的类型 进行价格和显示的类;
    Meal类

    package Builder;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Meal {
    
        private List<Iteam> iteams = new ArrayList<Iteam>();
    
        public void addMeal(Iteam iteam) {
            iteams.add(iteam);
        }
    
        public float getCost() {
            float cost = 0.0f;
            for (Iteam iteam : iteams) {
                cost += iteam.price();
            }
            return cost;
        }
    
        public void showItem() {
            for (Iteam iteam : iteams) {
                System.out.print("Item : " + iteam.name());
                System.out.print(", Packing : " + iteam.packing().pack());
                System.out.println(", Price : " + iteam.price());
    
            }
        }
    
    }
    
    

    6、BuilderMeal类 实际的Builder 类 ,负责创建Meal 对象;
    BuilderMeal类

    package Builder;
    
    public class MealBuilder {
    
        public Meal prepareVegMeal() {
            Meal meal = new Meal();
            meal.addMeal(new VegBurger());
            meal.addMeal(new Coke());
            return meal;
        }
    
        public Meal prepareNonVegMeal() {
            Meal meal = new Meal();
            meal.addMeal(new ChickenBurger());
            meal.addMeal(new Pepsi());
            return meal;
        }
    }
    
    

    7、BuilderPatternDemo ,使用MealBuilder来进行运行 ,(就是我们的Client
    BuilderPatternDemo类

    package Builder;
    
    public class BuilderPatternDemo {
    
        public static void main(String[] args) {
            MealBuilder mealBuilder = new MealBuilder();
            
            Meal vegMeal = mealBuilder.prepareVegMeal();
            System.out.println("Veg Meal");
            vegMeal.showItem();
            System.out.println("Total cost"+vegMeal.getCost());
            
            Meal nonvegMeal = mealBuilder.prepareNonVegMeal();
            System.out.println("Veg Meal");
            nonvegMeal.showItem();
            System.out.println("Total cost"+nonvegMeal.getCost());
        }
    }
    
    

    结果

    Veg Meal
    Item : Veg Burger, Packing : Wrapper, Price : 25.0
    Item : Coke, Packing : Bottle, Price : 30.0
    Total cost55.0
    Veg Meal
    Item : Chicken Burger, Packing : Wrapper, Price : 45.0
    Item : Pepsi, Packing : Bottle, Price : 35.0
    Total cost80.0
    
    

    相关文章

      网友评论

        本文标题:建造者模式案例

        本文链接:https://www.haomeiwen.com/subject/sffnhftx.html