设计模式(10)-----模板方法模式

模板方法模式(Template Method)

定义

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

UML类图

  

例子

  AbstractClass

package com.csdhsm.pattemdesign.template;/**  * @Title:  Templete.java   * @Description: 模板父类,包含子类相同部分,子类自己完成的部分* @author: Han   * @date:   2016年6月21日 下午10:03:44  */  
public abstract class Templete {//每个子类相同的执行方法public void topOperation() {beforeOperation();operation();afterOperation();}//每个子类不同的地方,延迟到子类去完成public abstract void operation();//已经定义好的方法,写在父类,避免重复private final void beforeOperation() {System.out.println("This acton before the operation!");}private final void afterOperation() {System.out.println("This acton after the operation!");}
}

  模板方法1

package com.csdhsm.pattemdesign.template;/**  * @Title:  TempleteMethod1.java   * @Description: 模板方法1* @author: Han   * @date:   2016年6月21日 下午10:01:35  */  
public class TempleteMethod1 extends Templete {@Overridepublic void operation() {System.out.println("I`m Templete Method 1");}
}

  模板方法2

package com.csdhsm.pattemdesign.template;/**  * @Title:  TempleteMethod2.java   * @Description: 模板方法2* @author: Han   * @date:   2016年6月21日 下午10:02:02  */  
public class TempleteMethod2 extends Templete {@Overridepublic void operation() {System.out.println("I`m Templete Method 2");}
}

  客户端

package com.csdhsm.pattemdesign.template;public class Solution {public static void main(String[] args) {Templete templete1 = new TempleteMethod1();Templete templete2 = new TempleteMethod2();templete1.topOperation();templete2.topOperation();}
}

  结果

  OK,成功。

总结

  模板方法模式是通过把不变的行为搬移到父类(原则:不写一句重复的代码),出去子类中的重复代码,体现优势。模板方法提供了一个很好的代码服用的模板。

转载于:https://www.cnblogs.com/a294098789/p/5605194.html

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

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

相关文章

Android之提示Caused by: java.lang.UnsupportedOperationException: Binary XML file line #67: You must sup

1 问题 : Caused by: java.lang.UnsupportedOperationException: Binary XML file line #67: You must supply a layout_width attribute. 05-08 16:42:59.322 23038 23038 E AndroidRuntime: at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:7…

SLES修改本地FTP安装源

2019独角兽企业重金招聘Python工程师标准>>> SLES修改本地FTP安装源 一、配置本机FTP............................................................................................................. 1 1.1、安装.............................................…

.NET7 Preview4:重构的返回值TypedResults

为了更好的测试,更好的性能,Preview4带了一个新的请求返回值类型,这个新的类型中封装了所有的Http请求返回状态函数,还包括了返回成功后的几种数据类型,下面列举了几个常用的类型:app.MapGet("/test_o…

MATLAB软件禁用利好,Matlab被禁用?一款国产软件站了出来说:我就是中国的Matlab...

众所周知,前段时间Matlab被禁用,引发了网友们对于国产工业软件落后的诸多思考,比如为什么落后,落后到什么程度,有没有替代品等等。并且从Matlab到EDA,再到CAD等等,甚至工业操作系统等等&#xf…

CMDB资产采集

Paramikoimport paramiko private_key paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa) # 创建SSH对象ssh paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh.connect(ho…

《看聊天记录都学不会Python到游戏实战?太菜了吧》(3)都说123是字符不是数字

本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。 若…

ArcGIS实验教程:ArcGIS 10.2手把手图文安装教程(经典版)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) ArcGIS许可服务无法启动解决办法:Win10操作系统ArcGIS许可License无法启动的解决方法汇总(绝对成功!) 目录 一、系统…

html中radio,checkbox值的获取、赋值、注册事件

1&#xff0c;radio分组 只要name一样&#xff0c;就是一组的&#xff0c;即一组中只能选择一个&#xff0c;如下&#xff1a; 代码如下:<span>group1:</span> <input type"radio" id"radio1" checked"checked" name"grou…

ObjectAnimator属性动画应用demo

感谢慕课网--eclipse_xu 布局文件&#xff1a;activity_main.xml 1 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"2 xmlns:tools"http://schemas.android.com/tools"3 android:layout_width"match_parent"…

java数据库防火墙,数据库centos7防火墙导致java程序访问mongodb3.0.1时报错的问题分析...

环境描述&#xff1a;数据库&#xff1a;mongodb3.0.1数据库系统&#xff1a;centos7,(虚拟机&#xff0c;最小安装)数据库驱动&#xff1a;mongo-Java-driver-3.0.0.jar问题描述&#xff1a;shell环境下用mongo客户端程序能正常连接mongod&#xff0c;但java程序始终报错。查看…

Android之提示androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerV

1 问题 我有2个recycleView,但是用的同一个线性布局导致错误如下 LayoutManager androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerView: androidx.recyclerview.widget.RecyclerView{dfe1682 VFED..... ......I. 0,0-0,0 #7f090…

今晚在线解读|2021-2022 .NET 中国开发者生态调查报告

点击蓝字关注我们作为一名 .NETer&#xff0c;你就职于怎样规模的公司&#xff1f;所属什么行业领域&#xff1f;平时使用哪些快速开发框架&#xff1f;产品方向及收费模式又是怎样的&#xff1f; 作为一名开发者&#xff0c;你从业已有几年&#xff1f;平时加班多吗&#xff1…

实现网站验证码切换功能

实现网站验证码切换功能 一、样例 样例1、 样例2、 二、实现原理 三、实现代码 com.fry.servlet.VerifyCodeServlet 1 package com.fry.servlet;2 3 import javax.imageio.ImageIO;4 import javax.servlet.ServletException;5 import javax.servlet.annotation.WebServlet;6 im…

校园春色关不住,怎奈何唯有花枝俏,不见赏花人?

受新冠肺炎疫情的影响&#xff0c;直至今天&#xff08;2020年4月16日&#xff09;&#xff0c;各大学依然是人去楼空&#xff0c;我的大学也不例外。春天来了&#xff0c;本应是校园春色关不住&#xff0c;却怎奈何唯有花枝俏&#xff0c;不见赏花人&#xff1f;这也正应了那句…

CSDN是如何让我副业月入过万的?

始 我跟 CSDN 的缘分要从 2011 年说起&#xff0c;当时我正上高二&#xff0c;当时好像是在搞鼓 MFC。当时家里有了第一台电脑&#xff0c;我也再也不用去黑网吧去敲代码了&#xff0c;在家搜索资料的时候出现在我眼帘之中&#xff0c;并且对我有帮助的基本上都是 CSDN 上的内…

Java Servlet API中文说明文档

Java Servlet API中文说明文档 目 录 1.... Servet资料 1.1 绪言 1.2 谁需要读这份文档 1.3 Java Servlet API的组成 1.4 有关规范 1.5 有关Java Servlets 1.6 Java Servlet概论 1.7 Servlet的生命周期 1.8 Servlet的解析和载入 1.9 …

MSMQ消息广播

安装配置MSMQ消息广播&#xff0c;并验证是否可以发送广播消息&#xff0c;过程实录。1. 安装MSMQ with broadcasting support选择安装“消息队列”&#xff0c;并在子选项中选择“多播支持”一起安装。2. 注册表修改MulticastBindIPIf Message Queueing found multiple IP add…

Android之解决ScrollView包裹了两个RecyclerView导致滑动冲突问题

1 问题 ScrollView包裹了两个RecyclerView导致滑动冲突问题 2 解决办法 给ScrollView和两个RecyclerView分别设置isNestedScrollingEnabled属性为false scrollview.isNestedScrollingEnabled falsenotInstallRv.isNestedScrollingEnabled falseinstallRv.isNestedScrolling…

【操作系统】操作系统不可怕,重装系统不求人,因为我们是GISer!

GISer不仅可以用意念操作软件,而且可以轻松自如重装系统!今天我们分享用U制作启动盘,并安装Win7系统。 一、系统安装必备 优盘(现在的U盘内存都比较大,大于4G即可)电脑店操作系统(Win7 64位专业版)二、安装过程 1、系统启动盘制作 下载电脑店优盘制作软件,安装,运行…

php 依赖倒置原则,手撸golang 架构设计原则 依赖倒置原则

golang 架构设计原则 依赖倒置原则缘起最近复习设计模式拜读谭勇德的<>该书以java语言演绎了常见设计模式本系列笔记拟采用golang练习之依赖倒置原则依赖倒置原则(Dependence Inversion Principle, DIP)指设计代码结构时&#xff0c;高层模块不应该依赖底层模块&#xff…