zoukankan      html  css  js  c++  java
  • 冬天的柚子:template method[行为:模板方法]

         甚至读书的时候就听说过这个词“好莱坞法则”,当时只是看书,眯着眼睛也就过去了,

    这次看书,O,原来是这么回事,原来这里面还有这样的背景。如果你之前了解过设计模式,

    想扒下代码跑一下,Ok,肯定没问题,我写博客仅仅是记录下代码以及自己当时感受。

    如果您是大师,可以进来指导下me,谢谢

         幸好自己曾在平台做过一段时间,所以视频讲的很好,自己感觉很亲切。通过讲平台与二

    次开发来展现这个模式:

    一个平台提供的代码:

    平台提供的一个基类代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    //角色:框架开发者
    namespace ConsoleApplication2
    {
    ///<summary>
    /// 表示汽车测试框架,算法的框架与骨干(顶级行为,顶级逻辑,顶级操作)
    ///</summary>
    public abstract class Vehical
    {
    protected abstract void StartUp();//虚方法:是扩展点,设置成protected
    protected abstract void Run();
    protected abstract void Turn(int degree);
    protected abstract void Stop();
    ///<summary>
    /// 稳定的不喜欢变化的
    ///</summary>
    public void Test()//外部调用的用public
    {
    StartUp(); //晚绑定,留给程序开发人员-----扩展点
    //测试数据记录
    Run(); //晚绑定,留给程序开发人员-----扩展点
    //测试数据记录
    Turn(1); //晚绑定,留给程序开发人员-----扩展点
    //测试数据记录
    Stop(); //晚绑定,留给程序开发人员-----扩展点
    //测试数据记录
    }
    }

    class VehicalTestFrameWork
    {
    //根据传进去值不同来显示不同的值
    public static void DoTest(Vehical vehical)
    {
    vehical.Test();
    }

    }

    }

    有可能一个二次开发商提供的代码:

    二次开发商调用的代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication2
    {
    ///<summary>
    ///二次开发人使用框架类:晚开发
    ///</summary>
    public class HongQiCar : Vehical
    {
    protected override void StartUp()
    {
    //汽车开发商具体去实现
    }
    protected override void Run()
    {
    //汽车开发商具体去实现
    }
    protected override void Turn(int degree)
    {
    //汽车开发商具体去实现
    }
    protected override void Stop()
    {
    //汽车开发商具体去实现
    }
    }
    }
    终端调用代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication2
    {
    public class TempAPP
    {
    public void Test()
    {
    //最终调用点;通过传值的不同来调用不同的对象
    VehicalTestFrameWork.DoTest(new HongQiCar());
    }
    }
    }


    自己看视频记下的笔记:

    完善的知识点:

    1.操作与操作之间的关系

    在所有的行为型模式里面描述的是行为在不同类之间的分布关系

    2.当我们即有代码的复用的过程中又有变化的需求的时候用此模式是比较有意思的

    3.如果你只想了解一种设计模式,那么就是它了

    多态的使用

    4.虚函数的多态型与晚绑定性

    多态是继承与类型动态绑定(晚绑定)的一种情况

    5.继承与委托的区别

    6.Do not call me, let me call you 不要调用我 让我调用你

    模板方法导致一种反向控制的结构,这种结构有时被称为“好莱坞法则”,即“别找我们,

    我们找你”,这指的是一个父类调用一个子类的问题,而不是相反。

    六点是我《设计模式》这本书的时候摘录下来的 我感觉这句话描述的特别好。

    ---------------------------------------后记--------------------------------

      之前自己也了解过设计模式,但是从来没试着去敲代码去验证,这次有时间试着把代码

    敲了,感觉这个比干干的看书有意思多了,对了,敏捷软件开发原则,模式与实践(C#)

    天刚刚买了本书,也参合着看了,只看了模板这个模式,感觉还可以。

  • 相关阅读:
    组合两个表(sql查询语句)
    The six Day 数组中找出和为目标值
    实时监控-CPU
    使用 python 的细碎总结
    Visual Studio 2017 运行、调试使用CMake构建的多可执行程序项目
    git 学习笔记 —— 在不同的提交间进行切换和重置( git reset/reflog/tag 命令)
    git 学习笔记 —— 保留/丢弃当前分支修改并切换至其他分支
    git 学习笔记 —— 获取远端仓库以及提交信息至远端 git remote/fetch/branch
    git 学习记录—— git 中的仓库、文件状态等概念介绍
    VScode 配置 C++ 环境进行编译和调试
  • 原文地址:https://www.cnblogs.com/muer/p/design_patterns_templatemethod.html
Copyright © 2011-2022 走看看