`
gary0416
  • 浏览: 331416 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Decorator模式

阅读更多

动态给一个对象添加一些额外的职责,即为已有功能动态添加更多功能

 

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();
	}
}

 

0
16
分享到:
评论
1 楼 37392872kiss 2011-02-16  
学习了!谢谢哈

相关推荐

Global site tag (gtag.js) - Google Analytics