装饰步骤:
1.装饰类与被装饰类要实现同一个接口或继承同一个父类
2.在装饰类中持有一个被装饰引用
3.重写方法,进行功能增强。
Component:抽象构件 给出一个抽象接口,以规范准备接收附加责任的对象
代码实现:
public interface Component {
public void sampleOperation();
}
ConcreteComponent:具体构建 定义一个将要接收附加责任的类
public class ConcreteComponent implements Component {
@Override
public void sampleOperation() {
// 写相关的业务代码
}
}
Decorator:装饰角色 定义一个将要接收附加责任的类
public class Decorator implements Component{
private Component component;
public Decorator(Component component){
this.component = component;
}
@Override
public void sampleOperation() {
// 委派给构件
component.sampleOperation();
}
}
ConcreateComponent:具体装饰 负责给构件对象“贴上”附加的责任
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void sampleOperation() {
super.sampleOperation();
// 写相关的业务代码
}
}
优点 | 缺点 |
---|---|
1.比静态继承更加的灵活 | 增加大量功能类似的小对象增加学习难度 |
2.增强原有功能的同时,接口一直不影响原有对象使用 | |
3.装饰功能可以累加 |