设计模式学习笔记(三)- -装饰者模式

本文通过咖啡的例子详细介绍了装饰者模式的概念及其应用场景。装饰者模式允许在不改变原有对象的情况下动态地增加其职责,提供了一种比继承更具弹性的扩展方式。

[同系列文章]
1.设计模式学习笔记(一)- -策略模式
2.设计模式学习笔记(二)- -观察者模式

我又来了,续更ヾ(◍°∇°◍)ノ゙,接下来的内容是观察者模式的学习笔记

以下正文ヽ( ̄▽ ̄)ノ)

装饰者模式

装饰者模式 动态地将责任附加到对象上。若要拓展功能,装饰者提供了比继承更加富有弹性的替代方案。

先大概看看下面的几张图,帮助恢复记忆~

咖啡的例子

咖啡的例子

类图:
装饰者的类图

思路:以咖啡为例子,首先撸一个 咖啡的抽象类 以及 一个 调味抽象类(继承了咖啡抽象类的),然后实现咖啡的具体类,实现调味的具体类~~

上个代码帮助理解:

//咖啡的抽象类
public abstract class Coffee{
    String des = "UnKown";
    public String getDes(){
        return des ;
    }
    public abstract double cost();
}

//继承咖啡的调味料抽象类
public abstract class Condiment extends Coffee{
    public abstract String getDes();
    //关键点:所有的调味料子类都要重新实现这个描述方法;
    //原因,让描述更加清晰,得到出完整的 咖啡--调味 链条;
}

//继承咖啡的具体类
public class MiaoshiCoffee extends Coffee{
    public MiaoshiCoffee (){
        des = "MiaoshiCoffee" ;
    }
    public double cost(){
        return 25.99;
    }
}

//继承调味料的具体类
public class Salt extends Condiment{
    Coffee coffee;
    public Salt(Coffee coffee){
        this.coffee = coffee;
    }

    public String getDes(){
        return coffee.getDes()+",Salt";
    }

    public double cost(){
        return coffee.cost()+2.99;
    }
}

public class Test{
    public void main(){

        Coffee coffee = new MiaoshiCoffee();
        //可以不装饰,直接coffee.getDes();coffee.cost();
        //要装饰,那么就直接new一个咯,把当前的coffee传给新对象
        coffee = new Salt(coffee);//加盐
        coffee = new Salt(coffee);//加第两份盐
        coffee = new Other(coffee);//当然,也可以再加别的
        //可以简写为:
        //Coffee coffee = new Other(new Salt(new Salt(new MiaoshiCoffee()))); 
        //最新的的装饰者放最外面~~
        coffee.getDes();//获取描述
        coffee.cost();//获取花费的金额
    }
}

总结:像洋葱一样,一层一层的剥开你的心~完结。2333,不是很难,认真看书消化吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值