动态给一个对象添加一些额外的职责,即为已有功能动态添加更多功能
SayHello.java
package com.gary.designpattern.decorator;
/**
* SayHello
* @author gary
*
*/
public class SayHello {
public void sayHello(){
System.out.println("sayHello:");
}
}
Decorator.java
package com.gary.designpattern.decorator;
/**
* 装扮类
* @author gary
*
*/
public class Decorator extends SayHello{
protected SayHello sayHello = null;
/**
* 装扮
* @param sayHello
*/
public void Decorate(SayHello sayHello){
this.sayHello = sayHello;
}
@Override
public void sayHello(){
sayHello.sayHello();
}
}
HelloA.java
package com.gary.designpattern.decorator;
/**
* HelloA
* @author gary
*
*/
public class HelloA extends Decorator{
/**
* 添加新功能
*/
@Override
public void sayHello(){
super.sayHello();
System.out.println("HelloA");
}
}
HelloB.java
package com.gary.designpattern.decorator;
/**
* HelloB
* @author gary
*
*/
public class HelloB extends Decorator{
/**
* 添加新功能
*/
@Override
public void sayHello(){
super.sayHello();
System.out.println("HelloB");
}
}
Test.java
package com.gary.designpattern.decorator;
/**
* 测试
* @author gary
*
*/
public class Test {
public static void main(String[] args) {
SayHello sayHelloA = new SayHello();
Decorator decoratorA = new Decorator();
HelloA helloAA = new HelloA();
HelloB helloAB = new HelloB();
//装饰过程,最终依次执行SayHello-HelloA-HelloB
decoratorA.Decorate(sayHelloA);
helloAA.Decorate(decoratorA);
helloAB.Decorate(helloAA);
helloAB.sayHello();
System.out.println("========split========");
SayHello sayHelloB = new SayHello();
Decorator decoratorB = new Decorator();
HelloB helloB = new HelloB();
//装饰过程,最终依次执行SayHello-HelloB
decoratorB.Decorate(sayHelloB);
helloB.Decorate(decoratorB);
helloB.sayHello();
}
}