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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值