四、装饰模式Decorator

一、定义

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

二、结构图


三、代码示例

1、演示Action.java
/**
 * 装饰者模式演示,
 * @author lattice
 *
 */
public class Action {

	public static void main(String[] args) {
		ConcreteComponent c=new ConcreteComponent();
		CreateDecoratorA d1=new CreateDecoratorA();
		CreateDecoratorB d2=new CreateDecoratorB();
		d1.setComponent(c);
		d2.setComponent(c);
		d2.Operation();
	}

}


2、组件component.java
/**
 * 组件
 * @author lattice
 *
 */
public abstract class Component {
	public abstract void Operation();
}

/**
 * 通过创建多个组件抽象类子类来实现同样方式调度不同方法
 * @author lattice
 *
 */
class ConcreteComponent extends Component{
	@Override
	public void Operation(){
		System.out.println("集体的对象操作!");
	}
}


3、装饰者Decorator.java
/**
 * 装饰者实现组件调度
 * @author lattice
 *
 */
public abstract class Decorator extends Component {
	protected Component component;
	public void setComponent(Component component){
		this.component=component;
	}
	@Override
	public void Operation(){
		if(this.component!=null){
			component.Operation();
		}
	}
}


4、具体装饰者创建CreateDecoratorA.java
/**
 * 装饰者创建
 * @author lattice
 *
 */
public class CreateDecoratorA extends Decorator {
	@Override
	public void Operation(){
		super.Operation();
		System.out.println("具体装饰对A的操作!");
	}
}

class CreateDecoratorB extends Decorator {
	@Override
	public void Operation(){
		super.Operation();
		System.out.println("具体装饰对A的操作!");
		this.addedBeheive();
	}
	private void addedBeheive(){
		System.out.println("自定义私有方法");
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章