zoukankan      html  css  js  c++  java
  • 设计模式之模板方法

    Template Method(模板方法)

     
    1. 意图
     
    定义一个操作中算法的骨架,将一些 步骤延迟到子类中,Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。
     
    2. 动机
     
    考虑一个提供Application和Document类的应用框架。Application类负责打开一个已有外部存储形式的文档,如一个文件。一旦一个文件的信息从该文件中读取之后,它就由一个Document对象表示。
     
     
     
    我们称OpenDocument方法为一个模板方法(template method),一个模板方法用抽象的操作定义一个算法,而子类重定义这些操作以提供具体的行为。Application的子类将定义检查一个文档能否被打开(CanOpenDocument)和创建文档(DoCreateDocument)的具体算法步骤。Document子类MyDocument则定义读取文档的算法步骤(DoRead)。
     
    通过使用抽象操作定义算法中的一个或几个步骤,模板方法确定了它们的先后顺序,但它允许Application和Document子类改变这些步骤以满足各自的需求。
     
    3. 适用性
     
    一次性实现算法中不变的部分,将可变的部分交给子类实现
    各子类中的公共行为应被提取并集中到父类中以避免代码重复
    子类的扩展受父类控制
     
    4. 结构
     
     
    5. 协作
     
    ConcreteClass靠AbstractClass实现算法中不变的步骤
     
    6. 效果
     
    模板方法是一种代码复用的基本技术,在类库中尤为重要,其提供了类库的公共行为。模板方法导致一种反向的控制结构,“好莱坞法则",“别找我们,我们找你”,指父类调用子类的操作,而不是相反。
     
    7. 实践
     
    非常常见的设计模式,通过父类定义框架,子类来填充
  • 相关阅读:
    Web服务器推送技术【转】
    [转]vs2010 中文版下载地址及可用CDKEY
    [php] sae上的一个应用框架申请通过了
    [linux] ssh WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 问题解决
    [php] 调试利器
    [javascript] 邮箱&&电话正则
    [erlang] Erlang比较运算符 (Term Comparisons)
    [vim] gvim 折行
    [linux] 查看内存型号
    [linux] mtu查看&&设置
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/4571764.html
Copyright © 2011-2022 走看看