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...