package Builder;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @Author Liuyunda
* @Date 2021/6/21 15:13
* @Email man021436@163.com
* @Description: DOTO
*/
// 创建一个表示食物条目和食物包装的接口。
interface Item{
public String name();
public Packing packing();
public BigDecimal price();
}
// 事物包装接口
interface Packing{
public String packing();
}
// 瓶子
class Bottle implements Packing{
@Override
public String packing() {
return "瓶子";
}
}
// 盒子
class Box implements Packing{
@Override
public String packing() {
return "盒子";
}
}
// 纸袋
class Bag implements Packing{
@Override
public String packing() {
return "纸袋";
}
}
// 创建实现了食物条目接口的抽象类
abstract class HanBao implements Item{
@Override
public Packing packing() {
return new Box();
}
@Override
public abstract BigDecimal price();
}
abstract class Coke implements Item{
@Override
public Packing packing() {
return new Bottle();
}
@Override
public abstract BigDecimal price();
}
abstract class Chicken implements Item{
@Override
public Packing packing() {
return new Bag();
}
@Override
public abstract BigDecimal price();
}
// 扩展食物的抽象类
class RouHanBao extends HanBao{
@Override
public String name() {
return "肉汉堡";
}
@Override
public BigDecimal price() {
return new BigDecimal("20");
}
}
class ShuCaiHanBao extends HanBao{
@Override
public String name() {
return "蔬菜汉堡";
}
@Override
public BigDecimal price() {
return new BigDecimal("15");
}
}
class IceCoke extends Coke{
@Override
public String name() {
return "加冰可乐";
}
@Override
public BigDecimal price() {
return new BigDecimal("11");
}
}
class NoIceCoke extends Coke{
@Override
public String name() {
return "不加冰可乐";
}
@Override
public BigDecimal price() {
return new BigDecimal("10.5");
}
}
class ZhaoShaoChicken extends Chicken{
@Override
public String name() {
return "照烧鸡翅";
}
@Override
public BigDecimal price() {
return new BigDecimal("30");
}
}
class AoerLiangChicken extends Chicken{
@Override
public String name() {
return "奥尔良鸡翅";
}
@Override
public BigDecimal price() {
return new BigDecimal("30");
}
}
// 套餐
class Meal{
private List<Item> items = new ArrayList<>();
public void addItem(Item item){
items.add(item);
}
public BigDecimal getTotalPrice(){
BigDecimal bigDecimal = new BigDecimal("0");
for (Item item : items) {
bigDecimal = bigDecimal.add(item.price());
}
return bigDecimal;
}
public void showItems(){
for (Item item : items) {
System.out.print("食物 : "+item.name());
System.out.print(", 包装 : "+item.packing().packing());
System.out.println(", 价格 : "+item.price());
}
}
}
// 创建套餐
class MealBuilder{
// 照烧鸡翅,肉汉堡,加冰可乐
public Meal juwuba(){
Meal meal = new Meal();
meal.addItem(new ZhaoShaoChicken());
meal.addItem(new RouHanBao());
meal.addItem(new IceCoke());
return meal;
}
// 奥尔良鸡翅,蔬菜汉堡,不加冰可乐
public Meal xiaojuwuba(){
Meal meal = new Meal();
meal.addItem(new AoerLiangChicken());
meal.addItem(new ShuCaiHanBao());
meal.addItem(new NoIceCoke());
return meal;
}
}
public class BuilderDemo {
public static void main(String[] args) {
MealBuilder mealBuilder = new MealBuilder();
Meal juwuba = mealBuilder.juwuba();
System.out.println("巨无霸套餐");
juwuba.showItems();
System.out.println("价格:"+juwuba.getTotalPrice());
Meal xiaojuwuba = mealBuilder.xiaojuwuba();
System.out.println("小巨无霸套餐");
xiaojuwuba.showItems();
System.out.println("价格:"+xiaojuwuba.getTotalPrice());
}
}
建造者模式
最新推荐文章于 2024-03-08 09:25:21 发布