An upgraded version of Java bridge mode

A Code

class Meal {
    protected MealImp imp;

    public Meal() {
        imp = new AmericanMealImp();
    }

    public Meal( String type ) {
        if (type.equals("American"))
            imp = new AmericanMealImp();
        if (type.equals("Italian"))
            imp = new ItalianMealImp();
    }

    public void getFirstCourse() {
        imp.getAppetizer();
    }

    public void getSecondCourse() {
        imp.getMeat();
    }

    public void getBeverage() {
        imp.getBeverage();
    }

    public void getDessert() {
        imp.getDessert();
    }
}

interface MealImp {
    public abstract void getAppetizer();

    public abstract void getSoup();

    public abstract void getSalad();

    public abstract void getFish();

    public abstract void getMeat();

    public abstract void getSorbet();

    public abstract void getPasta();

    public abstract void getBeverage();

    public abstract void getDessert();

    public abstract void getSandwich();
}

class AmericanMealImp implements MealImp {
    public void getAppetizer() {
        System.out.println("开胃菜    : 烤干酪");
    }

    public void getSoup() {
    }

    public void getSalad() {
    }

    public void getFish() {
    }

    public void getMeat() {
        System.out.println("肉食        :牛排");
    }

    public void getPasta() {
    }

    public void getBeverage() {
        System.out.println("酒水        :啤酒");
    }

    public void getDessert() {
        System.out.println("餐后甜点:苹果派");
    }

    public void getSorbet() {
    }

    public void getSandwich() {
    }
}

class ItalianMealImp implements MealImp {
    public void getAppetizer() {
        System.out.println("开胃菜: 意大利蔬菜拼盘");
    }

    public void getSoup() {
    }

    public void getSalad() {
    }

    public void getFish() {
    }

    public void getMeat() {
        System.out.println("肉食:      意大利柠檬香煎鸡排");
    }

    public void getPasta() {
    }

    public void getCheesePlate() {
    }

    public void getBeverage() {
        System.out.println("酒水:  卡普齐诺咖啡");
    }

    public void getDessert() {
        System.out.println("餐后甜点:   冰淇淋");
    }

    public void getSorbet() {
    }

    public void getSandwich() {
    }
}

class Snack extends Meal {
    Snack() {
        super();
    }

    Snack( String type ) {
        super(type);
    }

    public void getSnack() {    //甜点
        imp.getAppetizer();
    }
}

class Lunch extends Meal {
    Lunch() {
        super();
    }

    Lunch( String type ) {
        super(type);
    }

    public void getLunch() {   //午餐
        imp.getSandwich();     //三明治
        imp.getBeverage();     //饮品
    }
}

class FiveCourseMeal extends Meal {
    FiveCourseMeal() {
        super();
    }

    FiveCourseMeal( String type ) {
        super(type);
    }

    public void getEnormousDinner() {   //大餐
        imp.getAppetizer();   //开胃菜
        imp.getSorbet();      //果汁冰水
        imp.getSoup();        //汤
        imp.getSorbet();      //果汁冰水
        imp.getSalad();       //沙拉
        imp.getSorbet();      //果汁冰水
        imp.getFish();        //鱼
        imp.getSorbet();      //果汁冰水
        imp.getMeat();        //肉
        imp.getDessert();     //果汁冰水
        imp.getBeverage();    //酒水
    }
}

public class CustomerBridgeDemo2 {
    private FiveCourseMeal bigMeal;

    public CustomerBridgeDemo2( FiveCourseMeal meal ) {
        this.bigMeal = meal;
    }

    public void eat() {
        bigMeal.getEnormousDinner();
        bigMeal.getDessert(); //单点一个甜点,老菜谱依然有效
    }

    public static void main( String[] args ) {
        FiveCourseMeal aMeal = null;
        if (args.length == 0) {
            aMeal = new FiveCourseMeal();
        } else if (args.length == 1) {
            if (!(args[0].equals("American")) && !(args[0].equals("Italian"))) {
                System.err.println("输入参数有误!");
                System.err.println("正确用法: java Customer [American|Italian]");
                System.exit(1);
            } else {
                aMeal = new FiveCourseMeal(args[0]);
            }
        } else {
            System.err.println("输入参数有误!");
            System.err.println("正确用法: java Customer [American|Italian]");
            System.exit(1);
        }
        CustomerBridgeDemo2 cus = new CustomerBridgeDemo2(aMeal);
        cus.eat();
    }
}

Two runs

开胃菜    : 烤干酪
肉食        :牛排
餐后甜点:苹果派
酒水        :啤酒
餐后甜点:苹果派

Three 类图

Guess you like

Origin blog.csdn.net/chengqiuming/article/details/94299745