Command模式接口适配器实现一例

       Command模式在开发过程比较常用的一种模式,以下描述自己对这个模式的使用描述(对于Command模式的定义就不描述,网上有更多详细的)。在开发数据持久化组件里采用Command模式描述数据访问对象的规则:

       /// <summary>

    /// 数据操作接口

    /// </summary>

    public interface IDataAccess

    {

        /// <summary>

        /// 数据操作执行方法

        /// </summary>

        void Execute();

}

 

为了搞灵活性和方便扩展通常实现相关的抽象适配器,对于适配器的实现描述两种式(对于两种实现的差别在后面会描述)。

Adapter1(直接实现相关接口)

    public abstract class Adapter1 : IDataAccess

    {

        #region IDataAccess 成员

        public virtual void Execute()

        {

        }

        #endregion

}

 

Adapter2(采用了Template Method 模式)

    public abstract  class Adapter2:IDataAccess

    {

        #region IDataAccess 成员

        public void Execute()

        {

            OnExecute();

        }

        protected virtual void OnExecute()

        {

        }

        #endregion

}

针对可扩展性适配器对象可能添加相关的成员帮助扩展,这里只是大概描述一下所以比较简单。

在实际应用中自己会使用第二种方法去实现适配器对象,因为后者更具扩展性。为了证实这一点实现不同适配器的派生对象:

Adapter1的派生实现:

    public class Adapter1Impl_A : Adapter1

    {

        public override void Execute()

        {

           

        }

    }

    public class Adapter1Impl_B : Adapter1

    {

        public override void Execute()

        {

            base.Execute();

        }

}

Adapter2的派生实现

    public class Adapter2Impl_A : Adapter2

    {

        protected override void OnExecute()

        {

           

        }

    }

    public class Adapter2Impl_B : Adapter2

    {

        protected override void OnExecute()

        {

            base.OnExecute();

        }

 }

现在面对一个需求添加日志处理,因为Adapter1有些派生类在面对特殊需求的情况下并没有调用基类方法,因此实现统一日志处理就比较麻烦。那对于Adapter2来说又怎样呢,下面是Adapter2实现统一日志处理方法(显然Adapter1是不能这么方便实现的)。

Adapter2的日志实现:

    public abstract  class Adapter2:IDataAccess

    {

        #region IDataAccess 成员

 

        public void Execute()

        {

            OnExecute();

            OnWriteLog();

        }

        protected virtual void OnExecute()

        {

        }

        protected virtual void OnWriteLog()

        {

        }

        #endregion

    }

以上实现除了可以在Adapter2中统一实现日志处理外,派生类可以根据自己情况重写自己的日志处理;这样实现除了可以保证Adapter2代码的封装性外还提供灵活的扩展性。

以下是实现命令接口处理的方法(只是简单的实现):

        public static void DoExecute(params IDataAccess[] accesss)

        {

            if (accesss == null)

                return;

            foreach (IDataAccess item in accesss)

            {

                item.Execute();

            }

        }

以上是自己在使用模式的一些心得,如果以上使用存在什么问题请大家多提意见。

posted on 2006-11-21 10:44  henry  阅读(1724)  评论(4编辑  收藏  举报

导航