基于装饰器模式的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就粉墨登场了!

posted @ 2011-10-18 10:22  Joe·Zhou  阅读(550)  评论(0编辑  收藏  举报