动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。
所谓透明地给一个对象增加功能,就是要给一个对象增加功能,但是不能让这个对象知道,也就是不能去改动这个对象。
public abstract class Component {
public abstract void operation();
}
public class ConcreteComponent extends Component {
public void operation() {
}
}
public abstract class Decorator extends Component {
protected Component component;
public Decorator(Component component) {
this.component = component;
}
public void operation() {
component.operation;
}
}
public class ConcreteDecoratorA extends Decorator {
private String addedState;
public ConcreteDecoratorA(Component component) {
super(component);
}
public String getAddedState() {
return addedState;
}
public void setAddedState(String addedState) {
this.addedState = addedState;
}
public void operation() {
super.operation();
}
}
public class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
private void addedBehavior() {
}
public void operation() {
super.operation();
addedBehavior();
}
}
在面向对象的设计中,有一条基本的规则就是“尽量使用对象组合,而不是对象继承”来扩展和复用功能。
装饰模式和AOP在思想上有共同之处。
装饰模式Decorator动态组合
猜你喜欢
转载自katy1206.iteye.com/blog/2030019
今日推荐
周排行