当前位置: 首页 > news >正文

设计模式~模板方法模式(Template method)-10

目录

(1)优点:

(2)缺点:

(3)使用场景:

(4)注意事项:

(5)应用实例:

(6)Servlet Api & Spring 中的应用

代码

        (钩子函数)在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

        定义一个操作的算法骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

        【看过《如何说服女生上床》这部经典文章吗?女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤 (Template method),但每个步骤针对不同的情况,都有不一样的做法,这就要看你随机应变啦 (具体实现);

        模板方法模式:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。】

        意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

        主要解决:一些方法通用,却在每一个子类都重新写了这一方法。

        何时使用:有一些通用的方法。

        如何解决:将这些通用算法抽象出来。

        关键代码:在抽象类实现,其他步骤在子类实现。

        应用实例: 1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。 2、西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。 3、spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。

(1)优点:

        1、封装不变部分,扩展可变部分。

        2、提取公共代码,便于维护。

        3、行为由父类控制,子类实现。

        4.你可以让客户端只覆盖大型算法的某些部分,从而减少算法其他部分发生的更改对它们的影响。

        5.你可以将重复的代码拖放到超类中。

(2)缺点:

        每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

(3)使用场景:

        1、有多个子类共有的方法,且逻辑相同。

        2、重要的、复杂的方法,可以考虑作为模板方法。

(4)注意事项:

        为防止恶意操作,一般模板方法都加上final关键词。

(5)应用实例:

        1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。

        2、西游记里面菩萨定好的81难,这就是一个顶层的逻辑骨架。

        3、spring中对Hibernate的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。

(6)Servlet Api & Spring 中的应用

        1 javax.servlet.http.HttpServlet

        2 org.springframework.web.servlet.mvc.AbstractController

代码

public class Main {public static void main(String[] args) {F f = new C1();f.m();}}abstract class F {public void m() {op1();op2();}abstract void op1();abstract void op2();
}class C1 extends F {@Overridevoid op1() {System.out.println("op1");}@Overridevoid op2() {System.out.println("op2");}
}

http://www.lryc.cn/news/35134.html

相关文章:

  • 【WebSocket】在SSM项目中配置websocket
  • node-red中创建自定义节点 JavaScript 文件API编写详解
  • 华为OD机试 - 寻找路径 or 数组二叉树(C 语言解题)【独家】
  • YOLOv7、YOLOv5改进之打印热力图可视化:适用于自定义模型,丰富实验数据
  • 【Java代码与架构之完美优化】篇1:代码质量优化通用准则
  • Linux进程间通信详解(最全)
  • ROS 摄像头的使用
  • VR全景云展厅,实现7*24小时的线上宣传能力!
  • RK3568平台开发系列讲解(显示篇) DRM显示系统组成分析
  • WPF DataGrid控件的使用 使用列模板来进行数据格式的美化
  • elasticsearch自定义企业词典
  • 【AcWing】学了一坤时才明白的一道题
  • ES6的export和import
  • ASEMI高压MOS管20N60参数,20N60尺寸,20N60体积
  • 【备战面试】TCP的三次握手与四次挥手
  • 【模板进阶】
  • Tech Talk | 电致变色技术带来的智能AR体验
  • ACWING蓝桥杯每日一题python(持续更新
  • 【Linux】进程状态(阻塞、挂起、僵尸进程)
  • 规约第二章
  • 2019年MathorCup数学建模C题汽配件制造业中的生产排程问题解题全过程文档及程序
  • ARM uboot 的移植3 -从 uboot 官方标准uboot开始移植
  • 华为OD机试 - 快递货车(C 语言解题)【独家】
  • 连接微信群、Slack 和 GitHub:社区开放沟通的基础设施搭建
  • 数据中台架构体系理解
  • 高并发性能指标:QPS、TPS、RT、并发数、吞吐量
  • 【微信小程序】-- 案例 - 本地生活(列表页面)(三十)
  • 华为OD机试题,用 Java 解【一种字符串压缩表示的解压】问题
  • 所有科研人警惕,掠夺型期刊和劫持型期刊的区别,千万别投错了
  • 超详细CentOS7 NAT模式(有图形化界面)网络配置