《装饰器模式》

1.装饰器模式介绍

  • 意图:动态的给一个对象添加一些额外的责任,装饰器模式相比生成子类更加灵活
  • 使用场景:给一个类动态增加功能和动态撤销功能,提高灵活性,而不修改原有的类
  • 优点:装饰类和被装饰类可以独立发展,不会互相耦合,装饰模式是继承的一个替代模式
  • 缺点:多层装饰比较复杂

2.代码实现之

  • 新建睡觉的统一接口
interface Action{
    void sleep();
}
  • 新建睡觉的实现类
public class Sleep implements Action {
    @Override
    public void sleep() {
        System.out.println("睡觉...");
    }
}
  • 新建睡觉前装饰器类
class SleepBeforeDecorator implements Action{
    Action action;
    public SleepBeforeDecorator(Action action) {
        this.action = action;
    }
    @Override
    public void sleep() {
        System.out.println("睡觉前自动打开空调...");
        action.sleep();
    }
}
  • 新建睡觉后装饰器类
class SleepAfterDecorator implements Action{
    Action action;
    public SleepAfterDecorator(Action action) {
        this.action = action;
    }
    @Override
    public void sleep() {
        action.sleep();
        System.out.println("睡着后自动关灯....");
    }
}
  • 新建装饰器测试类,实现动态装饰
class Test{
    public static void main(String[] args) {
        //第一种情况
        Action beforeAction = new SleepBeforeDecorator(new Sleep());
        beforeAction.sleep();

        System.out.println("====================");

        //第二种情况
        Action afterAction  = new SleepAfterDecorator(new Sleep());
        afterAction.sleep();

        System.out.println("=====================");


        Action beforeAfterAction = new SleepBeforeDecorator(afterAction);
        beforeAfterAction.sleep();
    }
}
  • 结果预览,可以看出已经动态实现了三种情况
	睡觉前自动打开空调...
	睡觉...
	====================
	睡觉...
	睡着后自动关灯....
	=====================
	睡觉前自动打开空调...
	睡觉...
	睡着后自动关灯....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值