设计模式->建造者

建造模式

建造模式介绍

建造模式的核心就是不同对象的组合

类间关系

在这里插入图片描述

代码实现

食物接口

public interface IFood {
    void eat();//吃
    double getPrice();//获得价格
    FoodEnum getFoodType();//获得食物类型,便于后面强转
}

甜品接口

public interface IDessert extends IFood{
    void look();
}

饮品接口

public interface IDrink extends IFood {
    void touch();//饮品要先用手感受一下
}

肉接口

public interface IMeat extends IFood {
    /**
     * 肉要先闻一下香不香
     */
    void smell();
}

素食接口

public interface IVegetarian extends IFood {
    /**
     * 感受素食的快乐
     */
    void feeling();
}

定义食物类型枚举

public enum FoodEnum {
    DRINK,DESSERT,MEAT,VEGETARIAN
}

创建一个冰淇淋对象

public class IceCream implements IDessert {
    @Override
    public void eat() {
        System.out.println("冰淇淋,好吃");
    }

    @Override
    public double getPrice() {
        return 5D;
    }

    @Override
    public FoodEnum getFoodType() {
        return FoodEnum.DESSERT;
    }

    @Override
    public void look() {
        System.out.println("这冰淇淋,简直就是一件艺术品,开始吃了");
    }
}

定义汉堡对象

public class Hamburg implements IMeat {
    @Override
    public void eat() {
        System.out.println("双层汉堡,真香~~~");
    }

    @Override
    public double getPrice() {
        return 15D;
    }

    @Override
    public FoodEnum getFoodType() {
        return FoodEnum.MEAT;
    }

    @Override
    public void smell() {
        System.out.println("这汉堡,羊肉味儿+驴肉味儿,迫不及待了");
    }
}

定义饺子

public class Dumplings implements IMeat {
    @Override
    public void eat() {
        System.out.println("吃饺子,没想到吧,这里也有饺子");
    }

    @Override
    public double getPrice() {
        return 10D;
    }

    @Override
    public FoodEnum getFoodType() {
        return FoodEnum.MEAT;
    }

    @Override
    public void smell() {
        System.out.println("这饺子,真香,我开始吃了");
    }
}

定义可乐

public class CocaCola implements IDrink {
    @Override
    public void eat() {
        System.out.println("咕噜咕噜~~~");
    }

    @Override
    public double getPrice() {
        return 4D;
    }

    @Override
    public FoodEnum getFoodType() {
        return FoodEnum.DRINK;
    }

    @Override
    public void touch() {
        System.out.println("刚才摸了一下,有点冰啊");
    }
}

然后就是开始调用

public class Content {
    public static void main(String[] args) {
        PackageSelection packageSelection =new PackageSelection();
        Double checkout = packageSelection.addFood(new IceCream()).addFood(new Hamburg()).addFood(new CocaCola()).checkout();
        System.out.println("结账喽:---> "+checkout);

        List<IFood> iFoods = packageSelection.takeFood();
        for(IFood food:iFoods){
            //接下来判断食物类型
            switch (food.getFoodType()){
                case MEAT:{
                    //肉要先闻一下香不香,香就是好肉
                    ((IMeat)food).smell();
                    food.eat();
                    break;
                }
                case DRINK:{
                    //喝的一定要先用手感受一下他的温度
                    ((IDrink)food).touch();
                    food.eat();
                    break;
                }
                case DESSERT:{
                    //甜品一定要先欣赏
                    ((IDessert)food).look();
                    food.eat();
                    break;
                }
                case VEGETARIAN:{
                    //素食要先感受下
                    ((IVegetarian)food).feeling();
                    food.eat();
                    break;
                }
                default:{
                    food.eat();
                    break;
                }
            }
        }
    }
}

output:

结账喽:---> 24.0
这冰淇淋,简直就是一件艺术品,开始吃了
冰淇淋,好吃
这汉堡,羊肉味儿+驴肉味儿,迫不及待了
双层汉堡,真香~~~
刚才摸了一下,有点冰啊
咕噜咕噜~~~

建造者模式的核心就是能够自由组合对象,就像选食物套餐一样

完整代码可以去我的GitHub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值