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

    一、概述

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

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

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

     


    二、应用实战

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

    其UML图如下:

    模板方法模式 

    其中:

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

    三、总结

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

    铁打的营盘流水的兵

    优点:

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

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

  • 相关阅读:
    遇到的一道发散思维题C#
    SQLSERVER函数判断当天是星期几
    C# Web 获取客户端IP
    C# 月度进度条实现
    FileZilla Server的安装和设置
    SQL1428N 应用程序已与 "DB2" 连接,
    DB2客户端连接服务器
    IIS提示Execute Access Denied解决办法
    dom4j java.lang.NoClassDefFoundError: org/jaxen/JaxenException
    Oracle查看用户、用户权限、用户表空间、用户默认表空间
  • 原文地址:https://www.cnblogs.com/not2/p/11075695.html
Copyright © 2011-2022 走看看