建造模式
建造模式介绍
建造模式的核心就是不同对象的组合
类间关系
代码实现
食物接口
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
这冰淇淋,简直就是一件艺术品,开始吃了
冰淇淋,好吃
这汉堡,羊肉味儿+驴肉味儿,迫不及待了
双层汉堡,真香~~~
刚才摸了一下,有点冰啊
咕噜咕噜~~~
建造者模式的核心就是能够自由组合对象,就像选食物套餐一样