设计模式~模板方法模式(Template method)-10
创始人
2024-05-31 04:17:18
0

目录

(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");}
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...