定义:
动态地给一个对象增加一些额外的职责。
就增加功能来说,装饰模式相比生成子类更为灵活。
适用性:
1.在不影响对象的情况下,以动态、透明的方式给单个对象增加职责。
2.对象那些可以撤销的职责 。
3.当不能采用生成子类扩充时。
类图:
代码:
package designPatterns;
interface Personn{//dinyi一个对象接口,可以给这些对象动态地添加职责
void eat();
}
class Mann implements Personn{//定义一个对象,可以给这个对象添加一些职责。
public void eat(){
System.out.println("Man");
}
}
class Decorator implements Personn{//维持一个指向Component对象的指针,并定义一个与Component 接口一致的接口。
protected Personn person;
public void SetPerson(Personn person) {
this.person=person;
}
public void eat() {
person.eat();
}
}
class ManDecoratorA extends Decorator{//向组件添加职责。
public void eat(){
super.eat();
reEat();
System.out.println("ManDecorator A");
}
public void reEat(){
System.out.println("re eat()");
}
}
class ManDecoratorB extends Decorator{
public void eat(){
super.eat();
System.out.println("===========");
System.out.println("ManDecorator B");
}
}
public class DecoratorTest {
public static void main(String[] args) {
Mann man = new Mann();
ManDecoratorA md1 = new ManDecoratorA();
ManDecoratorB md2 = new ManDecoratorB();
md1.SetPerson(man);
md2.SetPerson(md1);
md2.eat();
}
}
结果:
Man
re eat()
ManDecorator A
===========
ManDecorator B