装饰模式的知识

装饰模式定义:
在不改变原来类的基础上,动态的对这个类进行添加或者是删减功能的一种模式
在装饰模式中主要有四个角色组成:
抽象构件:定义一个接口或者是抽象类,规范接收的附加责任的对象
具体构件:定义一个将要接收附加责任的类
装饰角色:注入一个抽象构件的类,并且实现与构件的接口
具体装饰角色:负责给构件对象贴上“附加"标签
具体的代码格式如下:
这里主要是以火锅锅底的为一个例子来讲述装饰模式的

/**
 * @Author: Jason
 * @Create: 2019/12/28  19:16
 * @Description 装饰模式中的火锅锅底
 *  抽象构件
 */
public interface GuoDi {

    //这里只是设计到火锅的锅底结果,
    double price(double  price);

    //以及锅底名称
    String  name(String  name);
}


/**
 * @Author: Jason
 * @Create: 2019/12/28  19:19
 * @Description 鸳鸯火锅
 * 具体构件
 */
public class YuanYang implements GuoDi {

    @Override
    public double price(double price) {
        return price;
    }

    @Override
    public String name(String name) {
        return name;
    }
}


/**
 * @Author: Jason
 * @Create: 2019/12/28  19:21
 * @Description 配菜
 * 装饰角色
 */
public  class PeiCay implements GuoDi{

    private GuoDi  guoDi;

    public  PeiCay(GuoDi  guoDi){
        super();
        this.guoDi = guoDi;
    }

    @Override
    public double price(double price) {
        return guoDi.price(price);
    }

    @Override
    public String name(String name) {
        return guoDi.name(name);
    }
}


/**
 * @Author: Jason
 * @Create: 2019/12/28  19:28
 * @Description 大白菜
 * 具体的装饰角色
 */
public class DaBaiCai extends PeiCay {

    public DaBaiCai(GuoDi guoDi) {
        super(guoDi);
    }

    @Override
    public double price(double price) {
        return super.price(price) +  20;
    }

    @Override
    public String name(String name) {
        return super.name(name) + "添加一味大白菜配菜";
    }
}


/**
 * @Author: Jason
 * @Create: 2019/12/28  19:34
 * @Description 装饰模式的代码测试
 */
public class GuoDi {
    public static void main(String[] args) {
        //点了一份鸳鸯锅底
        YuanYang  guoDi = new YuanYang();
        String name = guoDi.name("鸳鸯锅底");
        Double peice = guoDi.price(300);
        //然后再加上一份配菜
        DaBaiCai daBaiCai = new DaBaiCai(guoDi);
        //计算出总价钱
        String totalCaiMing = daBaiCai.name(name);
        Double totalPrice = daBaiCai.price(peice);
        System.out.println(totalCaiMing);
        System.out.println("总价格为:" + totalPrice);
    }
}

装饰模式总结:在装饰模式中主要的一个功能-就是对一个对象不断进行功能的拓展,在不影响前面的类的情况下进行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值