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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值