现在的位置: 首页 > 综合 > 正文

设计模式之—非虚模式

2013年07月23日 ⁄ 综合 ⁄ 共 1094字 ⁄ 字号 评论关闭

    非虚模式的是将调用接口与实际执行函数分离,调用接口不支持继承(没有多态功能),而将实现多态的功能交给具体的保护性执行函数,这样就使得调用接口统一,同时不损失多态的好处。具体做法如下:

    /// <summary>
    /// 基类
    /// </summary>
    public class Base
    {
        /// <summary>
        /// 对外公布的接口,注意这里不采用虚方法,主要是为了控制统一调用入口。
        /// 相当于真正所调用的方法的代理方法。
        /// </summary>
        public void DoWork()
        {
            //这种模式的好处就是你可以在这个方法添加很多附加的行为。

            //在很多时候,可以作为增加行为的一种方式.
            CoreDoWork();
        }
        /// <summary>
        /// 实际的工作代码方法,虚拟的,而且是保护的,故可以实现多态,而外部不能调用,就使得调用接口保持统一.
        /// </summary>
        protected virtual void CoreDoWork()
        {
            Console.WriteLine("Base.DoWork()");
        }
    }
    public class Derived : Base
    {
        /// <summary>
        /// 重写基类方法.
        /// </summary>
        protected override void CoreDoWork()
        {
            Console.WriteLine("Derived.DoWork()");
        }
    }
    /// <summary>
    /// 调用示例..
    /// </summary>
    public class EntryPoint
    {
        static void Main()
        {
            Base b = new Derived();
            b.DoWork();
        }
    }
这种模式的好处是既可以实现多态,同时还可以在代理方法处增加额外的行为,而且这种行为影响所有的调用。
而虚方法无法实现这种既增加额外的行为又影响所有调用的能力。

这种方式在有些时候可以作为面向方面编程(AOP)的一种实现方式,特别是哪些无中间语言生成的时候.。

抱歉!评论已关闭.