当前位置:首页 > 后端开发 > Java设计模式之模板(template)方法模式

Java设计模式之模板(template)方法模式

4个月前 (06-09)14

一,概述

这是写的第二篇Java设计模式的解析了,不过与其说是解析,不如说是自己写的一个Demo,一篇个人笔记。

二,对模板方法模式的一些个人理解

模板方法模式是结构最简单的行为型模式,有时,我们完成一件事情时次序是固定的,只有有些步骤确实变化的。比如,当我们去银行办业务时,就是a排队取号 b办具体业务(取钱) c对工作人员评价 三个步骤,而第二个步骤是不固定的。这种情况下,使用模板方法设计模式就优势明显了。我们只要在抽象方法中定义好完成这么一件事情的骨架,将具体步骤自己实现,而将不固定的部分暴露给子类实现即可,也就是将一些步骤延迟到子类中实现。子类不能改变父类的算法结构,只能是重新定义父类的某些步骤。贴代码吧,直观一点:

 

package com.bighuan.template;

/**
 * 设计模式之模板方法模式Demo
 * 
 * @author bighuan 去银行办理业务的步骤 1,排队取号 2,办理业务 3,为工作人员评分
 */
public abstract class BankTemplate {
	/**
	 * 排队取号
	 */
	public final void getNum() {
		System.out.println("排队取号");
	}

	/**
	 * 办理具体业务定义为抽象方法,供子类实现
	 */
	public abstract void exeTask();

	/**
	 * 评价
	 */
	public final void evaluate() {
		System.out.println("为工作人员评价打分");
	}

	/**
	 * 去银行办理业务所有步骤,整套流程
	 */
	public final void process() {
		getNum();

		exeTask();

		evaluate();

	}
}

在去银行办理业务的抽象模板类中,我们将排队取号和评价等具体方法实现,而将办理业务的核心流程定义为一个抽象的方法exeTask()方法。当子类继承BankTemplate是就必须实现这个方法了,我们就可以在这个方法中做一些取钱啊存款啊等操作。给个例子呗!好的,虽然自己卡里没什么钱,写个取钱的方法还是可以的。如下:

 

 

package com.bighuan.template;

import org.junit.Test;

public class WithdrawMoney extends BankTemplate {

	@Override
	public void exeTask() {
		System.out.println("我来银行取钱");
	}

	@Test
	public void test() {
		process();
	}

}

 

WithdrawMoney继承BankTemplate抽象类,就必须实现父类的抽象方法,在这里就可以实现办具体的业务了。你可以取钱,也可以存钱,等等。并且办一个业务中的流程是不变的,我们在父类的process()中定义好了。不知道你注意到了没有,父类中那些具体的步骤都用final关键字修饰了,不允许子类重写,子类只能自己实现那个暴露的方法,当然了,子类也是可以扩展一些方法的。由此可见,模板方法模式体现了Java中的”开闭原则”。

运行那个test()方法,结果如下:

 

排队取号
我来银行取钱
为工作人员评价打分

 

三,优缺点

优点:1,在父类中将总的具体步骤定义好,由子类实现细节。子类不会更改父类的算法结构。2,实现代码复用。3,很好的体现了开闭原则。

缺点:不同的实现都需要定义一个子类,如果实现过多,系统会过于庞大的,设计会过于复杂。但也体现了“单一职责原则”。

四,总结

少年,记住,今天是Java23种设计模式中的第二种设计模式,努力吧,将那些常用的设计模式掌握。好了,拜拜!

 

作者:bighuan
来源链接:https://blog.csdn.net/bighuan/article/details/62940515

“Java设计模式之模板(template)方法模式” 的相关文章

java中创建类与对象

java中创建类与对象 *创建类时类名要大写 *成员变量的变量名全部小写 1、必须使用new关键字创建一个对象 2、使用对象属性(对象名.成员变量)...

Software Testing - UI自动化测试常用设计模式之建造者(Java)

Software Testing - UI自动化测试常用设计模式之建造者(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 建造者模式和工厂模式...

Java 并发性和多线程

Java 并发性和多线程

阅读目录 一、介绍 二、多线程的优点 三、多线程的代价 四、如何创建并运行 java 线程 五、竞态条件与临界区 六、线程安全与共...

【52】java多线程剖析

【52】java多线程剖析

线程的状态: 线程共有下面4种状态: 新建状态(New): 新创建了一个线程对象,当你用new创建一个线程时,该线程尚未运行。...

Java开发中优雅的判空方法

一:java判断字符串是否为空的方法总结 方法一:开发中最常用的方法,看起来也比较高大上: if(StringUtils.isNotB...

java判断是否为空:java 判断对象是否为空

java判断是否为空:java 判断对象是否为空

java判断是否为空:java 判断对象是否为空 on 2009-2-12  in Java教程  |...

JAVA多线程下高并发的处理经验

JAVA多线程下高并发的处理经验

java中的线程:java中,每个线程都有一个调用栈存放在线程栈之中,一个java应用总是从main()函数开始运行,被称为主线程。一旦创建一个新的线程,就会产生一个线程栈。...

【java 多线程】多线程并发同步问题及解决方法

【java 多线程】多线程并发同步问题及解决方法

一、线程并发同步概念 线程同步其核心就在于一个“同”。所谓“同”就是协同、协助、配合,“同步”就是协同步调昨,也就是按照预定的先后顺序进行运行,即“你先,我等, 你做完,我再做”。...

Java集合 LinkedList的原理及使用

Java集合 LinkedList的原理及使用

本文基于java8从定义一个LinkList入手,逐步展开,从源码角度分析LinkedList双向链表的结构是如何构建的,同时针对其常用方法进行分析,包括get,add,remove以及...

Java 多线程(六) synchronized关键字详解

Java 多线程(六) synchronized关键字详解

Java多线程,synchronized关键字详解。通过一个例子的各种变化来说明。首先是synchronized使用与否的区别,然后是多个synchronized方法,之后是synchr...