`
wangkechao.dream
  • 浏览: 44192 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
352630cf-f670-3416-b946-55dec5cd787c
设计模式
浏览量:28968
社区版块
存档分类
最新评论

10.设计模式之装饰模式

阅读更多

装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式是通过把复杂的功能简单化,分散化,然后再运行期间,根据需要来动态组合的这样一个模式。

 

来段代码看看吧

1. 组件接口

package designpattern.decorator;

/**
 * 组件接口
 * 
 * @author king
 */
public abstract class Component {
	//接口中的方法
	abstract void operation();
}

 2.组件的实现类

 

/**
 * 组件的实现类
 * 
 * 被装饰的类
 * 
 * @author king
 *
 */
public class ComponentImpl extends Component{
	//组件中运行的方法
	@Override
	public void operation() {
		System.out.println("组件正在运转");
	}
}

 3.抽象装饰器类

 

/**
 * 
 * 抽象装饰器类
 * 
 * @author king
 *
 */
public abstract class AbstractDecorator extends Component {
	
	protected Component component;
	
	public AbstractDecorator(Component component){
		this.component = component;
	}
	@Override
	void operation(){
		component.operation();//调用组件的一些方法
	}
}

 4. 装饰器的具体实现类

/**
 * 装饰器的具体实现类
 * 
 * @author king
 *
 */
public class ConcreteDecorator extends AbstractDecorator {
	public ConcreteDecorator(Component component) {
		super(component);
	}
	@Override
	//被增强的方法
	void operation() {
		System.out.println("执行组件之前.....");
		super.operation();
		System.out.println("执行组件之后.....");
	}
}

 5. 运行类

public class Main {
	
	public static void main(String[] args) {
		//实例 化一个组件
		Component component = new ComponentImpl();
		//对组件中用到的方法进行曾强
		AbstractDecorator componentAdvise = new ConcreteDecorator(component); 
		//调用增强后的方法
		componentAdvise.operation();
	}
}

 运行结果

执行组件之前.....

组件正在运转

执行组件之后.....

 

想到什么? Aop  对不对,是不是。

待续<aopJVM    cglib 实现>

 

返回导航

参考文档 <http://blog.csdn.net/hust_is_lcd/article/details/7884320

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics