基于装饰器模式的AOP
/*****************************************************
*CreateBy:joe zhou
*CreateDate:2011-10-18
*Description:装饰器模式实现的拦截器
*****************************************************/
using System;
namespace T4Mvp
{
/// <summary>
/// 组件接口
/// </summary>
public interface IComponent
{
/// <summary>
/// 上下文对象
/// </summary>
object Context { get; }
/// <summary>
/// 核心执行方法
/// </summary>
void Execute();
}
/// <summary>
/// 装饰器对象
/// </summary>
public abstract class Decorator : IComponent
{
private object _context;
private IComponent _decoratee;
/// <summary>
/// 构造函数
/// </summary>
/// <exception cref="System.ArgumentNullException">参数为空时产生参数空异常</exception>
protected Decorator(IComponent decoratee)
{
#region 参数检查
if (decoratee == null)
{
throw new ArgumentNullException("decoratee");
}
#endregion
this._decoratee = decoratee;
this._context = decoratee.Context;
}
#region 切点
/// <summary>
/// 执行之前调用
/// </summary>
protected abstract void Starting();
/// <summary>
/// 执行完成后调用
/// </summary>
protected abstract void Completed();
#endregion
#region IComponent 成员
public object Context
{
get { return this._context; }
}
public void Execute()
{
Starting();
this._decoratee.Execute();
Completed();
}
#endregion
}
}
关于为什么要用AOP?很多人总是说记日志,个人以为仅仅为了记日志使用AOP有点搞笑。我认为AOP的魅力在于我们有一个开发好的功能,后来发现功能不完善,需要做一些处理而又不愿意去修改原有的封装,这个时候AOP就粉墨登场了!
浙公网安备 33010602011771号