装饰模式 (包装模式)
以对客户端透明的方式扩展对象的功能 ,是继承关系的一种替代方案
装饰模式角色
1.抽象构件角色
2.具体构件角色
3.装饰角色
4.具体装饰角色
EG:实例源代码
1.抽象构件角色
public interface Component{
//商业方法
void sampleOperation();
}
2.装饰角色源代码 注意此方法中每个方法的实现都委派给父类,但不是单纯的委派 还有功能的增强
public class Desorator implements Component{
private Component component;
public Desorator(Component component){
this.component=component;
}
public Desorator(){
}
//商业方法委派给构件
public void sampleOperation(){
component.sampleOperation();
}
}
3.具体构件角色源代码
public class DesoratorComponent implements Component{
public DesoratorComponent(){
}
//商业方法
public void sampleOperation(){
//write code
}
}
4.具体装饰角色源代码:
public class DesoratorDesorator extends Desorator{
//商业方法
public void sampleOperation(){
super.sampleOperation();
}
}
装饰模式的应用情况:
1.需要增加一个类的功能 ,或者给一个类增加附加责任
2.需要动态的给一个对象增加功能,这些功能可以再动态的撤销
3.需要增加一些由基本功能的排列组合而产生的大量的功能,从而使继承关系变的不现实