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

    一、概述

    一般问题:一个算法主体架构固定,细节多变。

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

    设计意图:将算法不变的主体提取到抽象父类,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

     


    二、应用实战

    Android锁屏的密码界面就用到了模板方法模式,锁屏有多种密码方式:PIN码解锁、复杂密码解锁等。其解锁算法的主体架构是固定的:都是读取输入后与底层匹配,返回匹配结果决定是否解锁;每中解锁方式又各有特点:比如界面UI、提示文本等。所以把解锁主体部分提取出来作为父类,每种解锁方式继承父类并修改某些细节,既减少了子类代码重复,又实现了解锁方式的多样性。

    其UML图如下:

    模板方法模式 

    其中:

    • KeyguardPinBaseInputView是PIN解锁方式,KeyguardPasswordView是复杂密码解锁方式。
    • verifyPasswordAndUnlock方式是主体解锁方法,是固定的,写在抽象父类中
    • getPasswordText和getPromptReasonStringRes是具体文本展示细节,随解锁方式变化,所以写在子类中

    三、总结

    总结:模板方法模式是一种行为型设计模式,设计意图比较简单,运用面向对象中的多态特性。用一句话概括模板方法模式:

    铁打的营盘流水的兵

    优点:

    • 通过把不变的行为搬移到父类,去除子类中的重复代码
    • 子类实现算法中某些细节,利于算法扩展
    • 符合开闭原则、依赖倒置原则

    缺点:每一种实现都需要一个子类,可能造成子类繁多,系统庞大

  • 相关阅读:
    微信公众号分析
    微信自动聊天机器人
    使用itchat分析自己的微信(1)
    内容补充 ----- 易错点
    运算符优先级
    亡羊补牢系列之字符串格式化
    亡羊补牢之python基础语法
    python基础,构建一个301个字典库
    mysql每个表总的索引大小
    mysql 查看单个表每个索引的大小
  • 原文地址:https://www.cnblogs.com/not2/p/11075695.html
Copyright © 2011-2022 走看看