java23种设计模式个人整理_java23种设计模式-行为型模式之模板方法模式

cef908281be59aea1699caca8a50eb02.png

定义:

Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法模式本质:抽象封装流程,具体进行实现

概述:

模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。

模式中的角色

抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。

具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

优点

模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。

子类实现算法的某些细节,有助于算法的扩展。

通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

缺点

每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

使用场景

  • 多个子类有公有的方法,并且逻辑基本相同时;
  • 重要,复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现;
  • 重构时,模板方法模式 是一个经常使用的模式,把相同的代码抽取到父类,然后通过钩子函数约束其行为;
  • 控制子类扩展,子类必须遵守算法规则。

具体实现:

模板方法模式(Template Method)

解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用,先看个关系图:

94e421b8133070e589070a5d6fe2a764.png

就是在AbstractCalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minus分别继承AbstractCalculator类,通过对AbstractCalculator的调用实现对子类的调用,看下面的例子:

抽象类:

70b86f81b5058379aa339252faa43988.png

实现类:

d156f46048eab3eab260b67a1e8616d9.png


测试类:

f8a8914204bbb9711343441ce6b96e77.png

输出:16

我跟踪下这个小程序的执行过程:首先将exp和"+"做参数,调用AbstractCalculator类里的calculate(String,String)方法,在calculate(String,String)里调用同类的split(),之后再调用calculate(int ,int)方法,从这个方法进入到子类中,执行完return num1 + num2后,将值返回到AbstractCalculator类,赋给result,打印出来。正好验证了我们开头的思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用VS studio 2008做sql server 报表出现乱码

找了半天,没有发现那里可以修改编码。后面又在网上搜索解决办法,答案少之又少,云里雾里。 后来在csdn上搜索到一片关于水晶报表的乱码解决方案,一试,同样可以解决。 其实并不是编码的问题, 而是因为所选字体不包含中文…

MASA Framework - 整体设计思路

源起年初我们在找一款框架,希望它有如下几个特点:学习成本低只需要学.Net每年主推的技术栈和业务特性必须支持的中间件,给开发同学减负,只需要专注业务就好个人见解:一款好用的框架应该是补充,而不是颠覆或…

​怎么用藏头诗向女友表白......

1 遇到不好使的水龙头时▼2 今天去你家玩好不好(素材来源网络,侵删)▼3 男朋友多会拍照(素材来源网络,侵删)▼4 干饭人有多难▼5 麻将的内涵!(素材来源网络,侵删&…

cvtcolor python opencv_二值分析 | OpenCV + skimage如何提取中心线

点击上方蓝字关注我们微信公众号:OpenCV学堂关注获取更多计算机视觉与深度学习知识问题前几天有个人问了我一个问题,问题是这样的,他有如下的一张二值图像:怎么得到白色Blob中心线,他希望的效果如下:显然Op…

又砸又烧,还要泼脏水,这谣言到底什么时候才没人信?发生这样的事真没想到.........

全世界只有3.14 % 的人关注了爆炸吧知识曾经看到一条新闻,说的是漂亮国人民怀疑口罩上的那个鼻梁条是5G天线,它不仅能控制人,还能致癌。“所以这就是他们计划杀死我们的方式,他们把5G电线放在了这里,就在这。”一名女子…

如何使用ASP.NET Core Web API实现短链接服务

前言在前面的文章中,我们介绍了hashids.net,可以将数值型Id加密成无意义的字符串。今天,我们来利用这一特点,实现短链接服务。原理短链接,顾名思义就是在形式上比较短的链接网址。借助短链接,可以用简短的网…

python 写入excel_一行一行整理EXCEL表太麻烦,试试python脚本,1秒写入数据

最近工作中,要整理数据,本来是以sql脚本录入,但是id、barcode等数据不好整理,因为这几个字段要唯一。所以想到用EXCEL表整理数据,再导入数据库中。整理的过程中,发现EXCEL一行一行的修改也挺麻烦&#xff0…

ORACLE 数据库安装后,PL/SQL的登录问题完美解决

windows7 64位系统 安装完oracle 后的用法如下分享链接:http://www.2cto.com/database/201307/226853.html#comment_iframe安装完PL/SQL后 。当你登陆时。你会遇到各种那个疼的问题。 例如:监听程序在CONNECT_DATA 中未获得SERVICE_NA 无监听程序 无法解…

3、AngularJS2 架构

2019独角兽企业重金招聘Python工程师标准>>> Angular 2 应用程序应用主要由以下 8 个部分组成: 1、模块 (Modules)2、组件 (Components)3、模板 (Templates)4、元数据 (Metadata)5、数据绑定 (Data Binding)6、指令 (Directives)7、服务 (Services)8、依…

Kubernetes:实现应用不停机更新

本篇主要讨论如何实现滚动更新和回滚,任意更换版本并且回滚以前的版本(版本更新),而下一章会讨论到 Pod 缩放,根据机器资源自动拓展和收缩应用(自动扩容实例)。本文为作者的 Kubernetes 系列电子书的一部分,电子书已经开源&#x…

inner join 和 exists 效率_一个in、exists、join的简单测试

创建两张表先单独插入两条数据然后批量插入部门号为10,20,30,40的数据各10499099条然后dept表也插些干扰数据测试语句开始验证in和exists和join 先比较个占比多的部门,再比较占比少的 1、 in 占比多 select count(*) from scott.EMP_TEST e where e.deptno in (sele…

httpModules 与 httpHandlers

httpModules 与 httpHandlers ASP.NET对请求处理的过程:当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给ASPNET_ISAPI.dll,ASPNET_…

多比Web 3D展示(3D机房/3D监控)中间件多比Web 3D展示(3D机房/3D监控)中间件免费下载购买地址...

多比3D是实现3D场景搭建的软件开发包,可以创建广泛的3D应用,适用于高端制造、能源、国防军工、教育科研、城市规划及建筑环艺、生物医学等领域的虚拟仿真,应用于虚拟展示、虚拟设计、方案评审、虚拟装配、虚拟实训等工作环节。 特点与优势 支…

python 工资管理软件_智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案...

智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案 更新时间:2020-11-23 20:41点击: 智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案 更多相关问题 【判断题】在声明类的成员属性时必须要用关键…

中国已消失的九所世界级大学

全世界只有3.14 % 的人关注了爆炸吧知识众所周知,我们国家的大学数量在世界范围内数一数二,但是有很多赫赫有名的大学却在历史中被人们遗忘,下面我们一起回顾一下那些不该被忘记的大学。>>>>▌燕京大学燕京大学(Yench…

IOS Table中Cell的重用reuse机制分析

2019独角兽企业重金招聘Python工程师标准>>> 解决代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIdentifier [NSString stringWithFormat:"Cell%d%d", …

VS2017/2019 F12无法导航到定义

今天对项目里某个对象点F12转到定义,无法跳转,研究了一会儿,找到如下解决方案:首先确认该函数是否能够正确被跳转到..就是是否真实定义了,然后确保要跳转的定义源码在项目文件下(而不是直接引用的DLL)接下来关闭VS2017…

unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...

【2019年12月8日 百天英语-Day135】【华东师范大学-林森撰写】昨日内容复习提要:昨天学习了主要学习了 ①be able to …与can的区别。②如何通过不认识的单词,猜到作者表达的含义。昨天文章如下:表示有能力做某事,be able to …与…