设计模式实践-模版方法模式

场景

解析不同协议

实现代码

协议解析抽象类

namespace DesignPatterns.TemplateMethod
{
    /// <summary>
    /// 抽象解包类
    /// </summary>
    public abstract class AbstractUnpack
    {
        /// <summary>
        /// 解析数据
        /// </summary>
        public abstract void UnpackData();

        /// <summary>
        /// 解包地址
        /// </summary>
        protected void UnpackAddress()
        {
            Console.WriteLine("解包地址");
        }

        /// <summary>
        /// 校验数据
        /// </summary>
        protected void CheckData()
        {
            Console.WriteLine("验证CRC");
        }
    }
}

A协议解析类

namespace DesignPatterns.TemplateMethod
{
    /// <summary>
    /// A协议解包类
    /// </summary>
    public class UnpackA : AbstractUnpack
    {
        /// <summary>
        /// 解包数据
        /// </summary>
        public override void UnpackData()
        {
            this.UnpackAddress();
            this.CheckData();
            Console.WriteLine("解包A协议数据");
        }
    }
}

B协议解析类

namespace DesignPatterns.TemplateMethod
{
    /// <summary>
    /// B协议解包类
    /// </summary>
    public class UnpackB : AbstractUnpack
    {
        /// <summary>
        /// 解包数据
        /// </summary>
        public override void UnpackData()
        {
            this.UnpackAddress();
            this.CheckData();
            Console.WriteLine("解包A协议数据");
        }
    }
}

相关调用

AbstractUnpack unpackA = new UnpackA();
AbstractUnpack unpackB = new UnpackB();
unpackA.UnpackData();
unpackB.UnpackData();   

Out:

解包地址
验证CRC
解包A协议数据
解包地址
验证CRC
解包A协议数据    
posted @ 2016-08-03 20:29  4Thing  阅读(126)  评论(0编辑  收藏  举报