装饰者模式

定义:动态的给一个对象添加一个额外的职责。比子类更加灵活

这里写图片描述

抽象组件AbstractComponent:定义一个抽象接口,来规范准备附加功能的类
具体组件Component:将要被附加功能的类,实现抽象构件角色接口
抽象装饰者AbstractDecorator:持有对具体构件角色的引用并定义与抽象构件角色一致的接口
具体装饰Decorator:实现抽象装饰者角色,负责对具体构件添加额外功能。

abstract class Component {
    public abstract void operate();
}

class ConcreteComponent extends Component {
    @Override
    public void operate() {
        System.out.println("ConcreteComponent do st");
    }
}

abstract class Decorator extends Component {
    private Component component;
    public Decorator(Component component){
        System.out.println("==>"+component);
        this.component = component;
    }

    @Override
    public void operate() {
        this.component.operate();
    }
}

class ConcreteDecorator1 extends Decorator {
    public ConcreteDecorator1(Component component) {
        super(component);
    }

    @Override
    public void operate() {
        method1();
        super.operate();
    }

    private void method1(){
        System.out.println("method1 do st");
    }
}

class ConcreteDecorator2 extends Decorator {
    public ConcreteDecorator2(Component component) {
        super(component);
    }

    @Override
    public void operate() {
        method2();
        super.operate();
    }

    private void method2(){
        System.out.println("method2 do st");
    }
}

public class Test {
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        component = new ConcreteDecorator1(component);
        component = new ConcreteDecorator2(component);

        component.operate();
    }
}
优点:

装饰者类和被装饰类可以独立发展,而不会互相耦合
装饰模式是继承的一种替代方案
动态扩展一个实现类的功能

缺点:

多层装饰会使类比较复杂,增加调试难度

应用:

需要扩展一个类的功能,或给一个类增加附加功能
动态的给一个类增加功能,而且可以动态撤销
需要为一批兄弟类进行改装或加装功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值