四、裝飾模式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("自定義私有方法");
	}
}



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