java装饰模式

         装饰模式是一种很常见的设计模式,他的定义为:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。

         直接上代码,很简单的代码:

      首先是接口和具体实现类(待装饰的类):

/**  
* Component: 抽象的接口类
* @author xuejupo  [email protected] 
* create in 2015-12-28 下午4:35:29  
*    
*/
interface Component
{
    public String doSomething();
}
/**  
* ConComponent: 具体的实现类
* @author xuejupo  [email protected] 
* create in 2015-12-28 下午4:39:37  
*    
*/
class ConComponent implements Component{

	@Override
	public String doSomething() {
		// TODO Auto-generated method stub
		return "我的信息";
	}
}

 装饰类1:

 

 

/**  
* Decorator1:装饰类1
* @author xuejupo  [email protected] 
* create in 2015-12-28 下午4:37:43  
*    
*/
class Decorator1 implements Component{
	private Component component;
	public Decorator1(Component component){
		this.component = component;
	}
	@Override
	public String doSomething() {
		// TODO Auto-generated method stub
		return "第一层封装++"+this.component.doSomething()+"++封装完成";
	}
}

 装饰类2:

/**  
* Decorator2:装饰类2
* @author xuejupo  [email protected] 
* create in 2015-12-28 下午4:37:43  
*    
*/
class Decorator2 implements Component{
	private Component component;
	public Decorator2(Component component){
		this.component = component;
	}
	@Override
	public String doSomething() {
		// TODO Auto-generated method stub
		return "第二层封装++"+this.component.doSomething()+"++封装完成";
	}
}

 测试代码:

 

 

public class ComponentTest {

	/**  
	 * main: 
	 * @param args 
	 * void  返回类型   
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Component c = new Decorator2(new Decorator1(new ConComponent()));
		System.out.println(c.doSomething());
	}
}

 结果:

第二层封装++第一层封装++我的信息++封装完成++封装完成

 很简单的代码,看这个,

Component c = new Decorator2(new Decorator1(new ConComponent()));

       是不是有种很熟悉i的感觉。。。    没错,jdk的io操作,就有很多装饰类。OSI参考模型中的各层数据,就很像装饰模式---每层将上层的数据封装后加上自己层的特定数据(相当于加强)。

       装饰模式可以用来对类进行功能性的加强,他又比继承简单(继承太臃肿了,就像上面的例子,如果用继承的话,应该有几个子类? 至少要4个吧。。。    因为装饰类是可以两两结合的,所以要达到装饰类的效果,至少要有4个子类,而装饰类一个就可以完成对原有功能的增强)。

 

 

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