装饰模式.

装饰设计模式强调的是增强效果(对一个类的某些功能进行增强)。

装饰类

package MONA.demo13_装饰设计模式;

/**
 * 喝咖啡
 *      咖啡:拿铁  摩卡
 *      加调料: 牛奶 巧克力
 *
 *      装饰设计模式
 */
public class Demo01 {
    public static void main(String[] args) throws Exception {
        MochaCoffee mochaCoffee = new MochaCoffee();
        System.out.println("咖啡名称:"+mochaCoffee.getName()+"  咖啡价格:"+mochaCoffee.getPrice());

        //需求:在不改变MochaCoffee类的情况下,添加新的功能

        //加了牛奶的摩卡
        Milk milk = new Milk(mochaCoffee);
        System.out.println("咖啡名称:"+milk.getName()+"  咖啡价格:"+milk.getPrice());

        //加了巧克力的摩卡
        Chocolate chocolate = new Chocolate(mochaCoffee);
        System.out.println("咖啡名称:"+chocolate.getName()+"  咖啡价格:"+chocolate.getCost());
    }
}

巧克力类

package MONA.demo13_装饰设计模式;

/**
 * 巧克力
 */
public class Chocolate {
    private Coffee coffee;
    private int cost = 10;

    public Chocolate(Coffee coffee){
        this.coffee = coffee;
    }
    double getCost(){
        return cost +coffee.getPrice();
    }
    public String getName(){
        return "加了巧克力的"+coffee.getName();
    }
}

牛奶类

package MONA.demo13_装饰设计模式;

/**
 * 牛奶类
 */
public class Milk {
    //持有咖啡对象
    Coffee coffee;
    //额外收费
    int cost = 10;

    public Milk(Coffee coffee){
        this.coffee = coffee;
    }
    //获取价格
    double getPrice(){
        return cost + coffee.getPrice();
    }
    public  String getName(){
        return "加了牛奶的"+coffee.getName();
    }
}
咖啡的父类

 

package MONA.demo13_装饰设计模式;

/**
 * 咖啡的父类
 */
public class Coffee {
    //价格
    protected double price;
    //名称
    protected String name;

    public Coffee(String name) {
        this.name = name;
    }
    //获取价格
    public double getPrice() {
        return price;
    }
    //获取名称
    public String getName() {
        return name;
    }
}
摩卡咖啡子类
package MONA.demo13_装饰设计模式;

/**
 * 摩卡咖啡子类
 */
public class MochaCoffee extends Coffee{
    public MochaCoffee() {
            super("摩卡");
    }
    @Override
    public double getPrice() {
            return 28;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值