您好,欢迎来到刀刀网。
搜索
您的当前位置:首页装饰模式.

装饰模式.

来源:刀刀网

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

装饰类

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;
    }
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务