建造模式
建造模式介紹
建造模式的核心就是不同對象的組合
類間關係
代碼實現
食物接口
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
這冰淇淋,簡直就是一件藝術品,開始吃了
冰淇淋,好吃
這漢堡,羊肉味兒+驢肉味兒,迫不及待了
雙層漢堡,真香~~~
剛纔摸了一下,有點冰啊
咕嚕咕嚕~~~
建造者模式的核心就是能夠自由組合對象,就像選食物套餐一樣