设计模式

设计模式(三)

建造者模式

1、创建食物类型接口

public interface Type {
    public String getName();
    public int getPrice();
}

2、创建继承食物类型接口的实体类

public class Egg implements Type{

    public String getName() {
        // TODO Auto-generated method stub
        return "鸡蛋";
    }

    public int getPrice() {
        // TODO Auto-generated method stub
        return 15;
    }

}
public class Meat implements Type{

    public String getName() {
        // TODO Auto-generated method stub
        return "肉";
    }

    public int getPrice() {
        // TODO Auto-generated method stub
        return 20;
    }

}
public class Vegetable implements Type {

    public String getName() {
        // TODO Auto-generated method stub
        return "蔬菜";
    }

    public int getPrice() {
        // TODO Auto-generated method stub
        return 10;
    }

}

3、创建套餐类

public class Meal {

    private List<Type> lists = new ArrayList<Type>();

    public void addFood(Type type){
        lists.add(type);
    }

    public void showFood(){
        for(Type type :lists){
            System.out.println(type.getName()+":"+type.getPrice());
        }
        System.out.println();
    }
}

4、创建套餐建造者类

public class MealBuilder {
    public Meal bulidMealA() {
        Meal MealA = new Meal();
        MealA.addFood(new Egg());
        MealA.addFood(new Vegetable());
        return MealA;
    }

    public Meal bulidMealB() {
        Meal MealB = new Meal();
        MealB.addFood(new Meat());
        MealB.addFood(new Vegetable());
        return MealB;
    }   
}

5、测试

public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        MealBuilder mB = new MealBuilder();
        Meal mealA = mB.bulidMealA();
        mealA.showFood();
        Meal mealB = mB.bulidMealB();
        mealB.showFood();
    }
}

6、结果(控制台输出)

鸡蛋:15
蔬菜:10:20
蔬菜:10

结论:

建造者模式提供了创建复杂对象的方式,该方式通过使用简单对象构造生成复杂对象,并且隐藏了构造逻辑。在本例中,通过不同的食物构造成套餐(meal),然后通过套餐建造者(MealBuilder)来建造不同的套餐,从而隐藏了套餐的构造逻辑,在测试类Main中只需调用MealBuilder的不同方法即可获取不同的套餐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值