设计模式之装饰器模式

package decorate;
/**
 * 设计模式之装饰器模式:动态给某个对象添加一些额外的职责。
 * 该模式涉及4个角色
 * 1、接口或者是抽象类(Abstract)
 * 2、需要被装饰的对象(Impl)---实现接口或者继承抽象类
 * 3、装饰类(Decorate)--也实现接口或者继承抽象类
 * 4、继承装饰类的子类(DecorateImpl)
 *
 * @author  
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public class Test {

	public static void main(String[] args) {
		Abstract impl = new Impl();
		Decorate decorate = new DecorateImpl(impl);
		decorate.buy();
	}
}

package decorate;

/**
 * 抽象类或者接口
 *
 * @author 
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public abstract class Abstract {

	public abstract void buy();
}

package decorate;

/**
 * 实现类,该类实现Abstract
 *
 * @author  
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public class Impl extends Abstract{

	@Override
	public void buy() {
		System.out.println("buy meat...");
	}
}

package decorate;

/**
 * 装饰器
 *
 * @author 
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public class Decorate extends Abstract{

	private Abstract impl;
	
	public Decorate(Abstract impl){
		this.impl = impl;
	}

	@Override
	public void buy() {
		impl.buy();
	}
	
}


package decorate;

/**
 * 具体的装饰器
 *
 * @author  
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public class DecorateImpl extends Decorate{

	public DecorateImpl(Abstract impl) {
		super(impl);
	}

	public void buy(){
		this.goToShop();
		super.buy();
		this.payMoney();
		this.backHome();
	}
	
	public void goToShop(){
		System.out.println("goto shop...");
	}
	
	public void payMoney(){
		System.out.println("pay money...");
	}
	
	public void backHome(){
		System.out.println("back home...");
	}
}



测试结果:
goto shop...
buy meat...
pay money...
back home...

你可能感兴趣的:(装饰器模式)