设计模式简单介绍五(模板方法模式)

模板方法模式的意图
定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
让我上去刚读到这段话我也是看不懂的,但是在现实中我们真的很常用到模板模式,通俗一些说就是如果我们需要通用的代码都需要上升到父类中,子类则只针对于于每个方法不同的实现。这里我们可以联想到设计原则中的依赖倒置原则,即抽象不应该依赖于细节,细节应该依赖于抽象,咱们的模板即可以考虑为抽象类,而我们具体实现则为实现抽象类的细节。
下面先来看一下模板模式的UML。
在这里插入图片描述
看到这个UML我的第一感觉是及其的简洁。其实我们的ConcreteClass可以有多个,也可以建造自己的方法。
下面通过一个小例子简单的了解一下。

//抽象类
public class CompanyInfo {
	public void TestCompany1(){
		System.out.println("测试公司1");
		System.out.println(address1());
	}
	
	public void TestCompany2(){
		System.out.println("测试公司1");
		System.out.println(address2());
	}

	public String address1() {
		return "";
	}
	
	public String address2() {
		return "";
	}
}
//具体实现类
public class CompanyOne extends CompanyInfo{
	@Override
	public String address1() {
		return "吉林省四平市";
	}
	@Override
	public String address2() {
		return "吉林省通源市";
	}
}

//具体实现类
public class CompanyTwo extends CompanyInfo{

	@Override
	public String address1() {
		return "辽宁省大连市";
	}
	@Override
	public String address2() {
		return "辽宁省锦州市";
	}
}

//客户端调用
	public static void main(String[] args) throws CloneNotSupportedException {
		CompanyInfo cm1 = new CompanyOne();
		cm1.TestCompany1();
		cm1.TestCompany2();
		CompanyInfo cm2 = new CompanyTwo();
		cm2.TestCompany1();
		cm2.TestCompany2();
	}

模板模式很常用,大家在无意中就可能用到,所以我也就不再赘述了。

热门文章

暂无图片
编程学习 ·

Python学习:变量

Python 变量类型 变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。 因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。变量赋值 Python 中的变量赋…
暂无图片
编程学习 ·

【图像处理】A Skinned Multi-Person Linear Model(SMPL)浅解析

【图像处理】A Skinned Multi-Person Linear Model(SMPL)浅解析SMPL的原理结语 SMPL的原理首先,博主不做3D建模的工作(尽管这项工作真的很酷),学习blender也仅是出于兴趣,因此,这篇博文中对SMPL模型的理解会有部分不足,内容仅供参考。《SMPL: A Skinned Multi-Person …
暂无图片
编程学习 ·

面向对象(二)- java

面向对象(二) 一、封装 封装使得对代码的修改更加安全和容易。将代码分成了一个个相对独立的单元。 封装所带来的好处是:明确的指出了那些属性和方法是外部可以访问的。这样当你需要调整这个类的代码时,只要 保证公有(Public:)属性不变,公有方法的参数和返回值类型不变,那…
暂无图片
编程学习 ·

mysql查询练习1篇

mysql查询练习1篇 学生表 学号 姓名 性别 出生日期 所在班级 create table student( sno varchar(20) primary key, sname varchar(20) not null, ssex varchar(10) not null, sbirthday datetime, class varchar(20) ) ENGINE=innoDB DEFAULT CHARACTER SET=utf8 ;教师表 教…
暂无图片
编程学习 ·

Android中给Layout添加点击事件

@Android中给Layout添加点击事件 步骤一:在layout控件中设置clickable和focuseable和id <LinearLayout android:id="@+id/to_anchor_dialog" android:onClick=“onClick” android:clickable=“true” android:layout_width=“match_parent” android:layout_hei…
暂无图片
编程学习 ·

leetcode 718.最长重复子数组

原题 718.最长重复子数组 2020年7月1日 每日一题题解 方法一 暴力法。 /*暴力法 @v7fgg 执行用时:2265 ms, 在所有 Java 提交中击败了5.00%的用户 内存消耗:39.3 MB, 在所有 Java 提交中击败了100.00%的用户 2020年7月1日 8:03 */ class Solution {public int findLength(int…
暂无图片
编程学习 ·

solr自动更新索引,tomcat+solr

核心文件夹: tomcat-8.0.35-search------端口8888 solr-7.2.0------端口8984 核心配置: 用于配置solr索引的定时增量更新和全部更新,两个文件保持一致就可以。 /tomcat/tomcat-8.0.35-search/bin/solr/conf/dataimport.properties /solr-7.2.0/server/solr/chuai/conf/datai…
暂无图片
编程学习 ·

Spring boot的项目文件

1.src–>main–>java 是用来放Java文件2.resources是用来放配置文件 application.properties用来放配置文件的信息3.test用来放一些测试用例4.新建一个Java类5.解决@RequestMapping报Cannot resolve symbol RestController’错误 解决办法: 在错误处按alt+enter 选择a…
暂无图片
编程学习 ·

30 个纯 HTML5 实现的游戏

作者:Danny Markov 来源:tutorialzin 译者:前端小智浏览器和 JavaScript 的功能逐年不断的变强变大。曾几何时,任何类型的游戏都需要Flash。但随着 HTML5 发展,HTML5 + WebGL 游戏式就慢慢占领着这个舞台。以下是30款流行的游戏,它们可以在所有现代浏览器中运行,并且只使…
暂无图片
编程学习 ·

抖音上卖什么最热销?抖音上最热销的产品是什么?

抖音带货卖什么类型产品热门,抖音带货做哪个领域好自去年六月第一批100个内测账号入驻以来,抖音购物车至今已运营一年有余。随着这一年来功能打磨、生态打通等不断完善,抖音购物车已成为KOL带货变现的绝佳途径之一。第一种,在抖音里卖减肥产品。现在的人生活条件都比较好,…
暂无图片
编程学习 ·

Promethus(普罗米修斯)监控系统搭建与使用实践

1.目标 1.1 能够安装prometheus服务器 1.2 能够通过安装node_exporter监控远程linux 1.3 能够通过安装mysqld_exporter监控远程mysql数据库 1.4 能够安装grafana 1.5 能够在grafana添加prometheus数据源 1.6 能够在grafana添加监控cpu负载的图形 1.7 能够在grafana图形显示mysq…
暂无图片
编程学习 ·

Web前端页面制作流程以及注意事项,满满的干货!

每天我们打开电脑,看到各种各样的web前端页面。你知道他们是如何制作的吗?为了让页面更具有规范性,让使用者更加方便,在制作页面过程中必须遵循一定的设计流程。在这里就为大家详细介绍一下制作一个Web前端页面的设计流程及注意事项。一:确定网站主题 每个网站都有自身以及…
暂无图片
编程学习 ·

Python——走马灯

走马灯 def f():import times=人生苦短,我学Pythonc=0while True:print(s)time.sleep(0.3)#休眠0.3秒。每隔0.3秒,即300毫秒显示一行代码s=s[1:]+s[0]c+= 1if c==2*len(s):break f()输出结果 人生苦短,我学Python 生苦短,我学Python人 苦短,我学Python人生 短,我学Python…
暂无图片
编程学习 ·

《忍者必须死3》游戏体验报告

(下文将《忍者必须死3》简称为忍3)一、背景1.1忍者必须死3流行原因分析1、情怀因素忍3的第一版游戏诞生于14年,第一版对标天天酷跑,第一版吸引用户的原因在于14年跑酷游戏众多而第一版不是氪金游戏玩法画风也算独树一帜。14年忍1的主要目标用户画像为经济能力有限的学生群体…
暂无图片
编程学习 ·

老鸟带你回顾新人Java不容错过的八本好书

回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路。 [入门] 我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让人哭啊。 后来我就看《…
暂无图片
编程学习 ·

约瑟夫生死小游戏

约瑟夫生者死者小游戏 30 个人在一条船上,超载,需要 15 人下船。 于是人们排成一队,排队的位置即为他们的编号。 报数,从 1 开始,数到 9 的人下船。 如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢? # 首先来一个超载的小船30人 people = list(range(1,3…
暂无图片
编程学习 ·

(python version) 劍指offer 35. 复制链表的复制

题目描述 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 来源:力扣(LeetCode)解题思路 剑指书上的方法 1.方法一第一步:复制原始链表上的每个节点N、创…
暂无图片
编程学习 ·

腾讯疑似回应被骗“辣椒酱不香了”!百度趁机诉苦!

导读:腾讯和老干妈怼怂,百度受伤,我们来看看到底怎么回事? 这一事件从腾讯告老干妈开始,理由是拖欠千万元广告费,故申请冻结老干妈1624万财产,结果老干妈直接发布声明:从未与腾讯公司进行过任何商业合作。 正当我们吃瓜群众等待下文的时候,贵阳警方发了一则通告:3人伪…