C#设计模式:7.模板方法模式 u3d学习总结笔记本

 

模板方法 (Template Method )
 

模板方法模式是基于继承的代码复用基本技术,在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。

把公共的内容提取到模板中,只留下部分让用户来填写。在软件系统中,将多个类的共有内容提取到一个模板中的思想便是模板方法模式的思想。

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

 

结构图:

 

模板方法的本质:固定算法骨架

  1.需要固定的算法骨架,实现一个公共部分,将可变的部分交给子类去实现;

  2.各个子类中具有公共部分,应该抽取出来,集中在一个类中去实现,从而避免代码重复;

  3.需要控制子类扩展情况,模板方法模式会在特定的点来调用子类的方法,这样只允许在这些点进行扩展;
 

简单例子:

 

模板类:

  public abstract class TemplateMethod_Base
    {
        public string str;

        //流程启动方法
        public void StartFunction(string path)
        {
            str = decryption(ReadFile(path));
            printText();
        }

        //读取文件
        private byte[] ReadFile(string path)
        {
            return File.ReadAllBytes(path);
        }

        //解码方式模板方法
        protected abstract string decryption(byte[] Data);

        //打印文件内容
        private void printText()
        {
            Debug.Log("文字为:" + str);
        }
    }

实现类:

 //具体解码
    public class Str_Utf8 : TemplateMethod_Base
    {
        protected override string decryption(byte[] Data)
        {
            return Encoding.UTF8.GetString(Data);
        }
    }

    //具体解码
    public class Str_Utf7 : TemplateMethod_Base
    {
        protected override string decryption(byte[] Data)
        {
            return Encoding.UTF7.GetString(Data);
        }
    }

 

运行测试:

  // Use this for initialization
    void Start()
    {
        TemplateMethod_Base templateMethod;

        templateMethod = new Str_Utf8();
        templateMethod.StartFunction(Application.streamingAssetsPath + "/WinInfo.json");

        templateMethod = new Str_Utf7();
        templateMethod.StartFunction(Application.streamingAssetsPath + "/WinInfo.json");

    }

 

结果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值