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

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