为了账号安全,请及时绑定邮箱和手机立即绑定

建造者模式案例

[TOC]

建造者解析》

例子

我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮

Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger

,它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是

装在瓶子中。
我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个

表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中


然后我们创建一个 Meal 类,带有 Item  ArrayList 和一个通过结合 Item 来创建不同类型的 Meal 

对象的 MealBuilderBuilderPatternDemo,我们的演示类使用 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
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

0 评论

作者其他优质文章

正在加载中
移动开发工程师
手记
6
粉丝
7
获赞与收藏
35

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消