模版方法模式(Template Method)
1、概念
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
![]()
2、模式结构
- 抽象类(AbstractClass): 定义一组基本方法供子类实现,定义并实现组合了基本方法的模板方法
- 具体子类 (ConcreteClass): 实现原语操作以完成算法中与特定子类相关的步骤。
3、使用场景
- 当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现
- 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能由各个子类实现
- 控制子类扩展;模板方法只在特定点调用“ hook”操作 ,这样就只允许在这些点进行扩展
4、优缺点
优点:
- 封装不变部分,扩展可变部分
- 一种代码复用的基本技术。它们在类库中尤为重要,它们提取了类库中的公共行为,便于维护
- 有框架控制如何做事情,而由使用框架的人指定框架算法中每个步骤的细节,实现控制反转原则
缺点:
- 每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象
5、实例
首先定义开门的的抽象类,openDoor为开门的公用方法,但开锁有多种方式,setNeedUnLock为钩子方法,可由子类控制是否需要开锁
public abstract class AbsUnlock {
private boolean isNeedUnlock = true;
protected abstract void unlockAction();
public void setNeedUnlock(boolean needUnlock) {
isNeedUnlock = needUnlock;
}
public final void openDoor() {
if (isNeedUnlock) {
unlockAction();
}
// 其它处理逻辑
}
}
磁卡开锁类
public class CardUnlock extends AbsUnlock {
@Override
protected void unlockAction() {
// 磁卡开锁逻辑
}
}
密码开锁类
public class PasswordUnlock extends AbsUnlock {
@Override
protected void unlockAction() {
// 密码开锁逻辑
}
}
客户端调用
public static void main(String[] args) {
CardUnlock card = new CardUnlock();
card.openDoor();
PasswordUnlock pwd = new PasswordUnlock();
pwd.openDoor();
}
模版方法模式(Template Method)的更多相关文章
- 设计模式 笔记 模版方法模式 Template Method
//---------------------------15/04/28---------------------------- //TemplateMethod 模版方法模式----类行为型模式 ...
- .NET设计模式(16):模版方法(Template Method)(转)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...
- NET设计模式 第二部分 行为型模式(15):模版方法模式(Template Method)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...
- 第13章 模版方法模式(Template Method)
原文 第13章 模版方法模式(Template Method) 模板模式 模板模式 举例:模拟下数据库的update方法,先删除在插入. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- 设计模式之模版方法模式(Template Method Pattern)
一.什么是模版方法模式? 首先,模版方法模式是用来封装算法骨架的,也就是算法流程 既然被称为模版,那么它肯定允许扩展类套用这个模版,为了应对变化,那么它也一定允许扩展类做一些改变 事实就是这样,模版方 ...
- 【设计模式 - 23】之模版方法模式(Template)
1 模式简介 模版方法模式的定义: 模版方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 模版方法模 ...
- 【pattern】设计模式(2) - 模版方法模式
前言 一晃一年又过了,还是一样的渣. 一晃2周又过去了,还是没有坚持写博客. 本来前2天说填一下SQL注入攻击的坑,结果看下去发现还是ojdbc.jar中的代码,看不懂啊.这坑暂时填不动,强迫在元旦最 ...
- 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)
设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...
- 设计模式 - 模板方法模式(template method pattern) JFrame 具体解释
模板方法模式(template method pattern) JFrame 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(templ ...
随机推荐
- AJPFX平台:外汇的基本面分析
AJPFX平台:开设外汇保证金交易账户以及入金之后,通常就可以开始交易了,但是在选择买卖时点时通常会依据两种分析,两种主要分析方法通常会被称为基本面分析和技术分析.基本面分析注重金融,经济理论和政局发 ...
- Tree with Small Distances(cf1029E)(树形动规)
You are given an undirected tree consisting of \(n\) vertices. An undirected tree is a connected und ...
- sublime text syntaxdef
http://sublimetext.info/docs/en/extensibility/syntaxdefs.html
- 教你通过Node.js漏洞完成渗透测试
本篇文章较为详细的讲述了通过node.js的已知漏洞来完成渗透测试的过程,介绍了node.js存在的漏洞可以在多种工具下的不同利用方式.因为我认为会对论坛部分web安全新手有所帮助,所以整理到论坛中. ...
- Python系列之——利用Python实现微博监控
0x00 前言: 前几个星期在写一个微博监控系统 可谓是一波三折啊 获取到微博后因为一些字符编码问题 导致心态爆炸开发中断 但是就在昨天发现了另外一个微博的接口 一个手机微博的接口https://m. ...
- Mysql root账号general_log_file方法获取webshell
在前面的phpmyadmin漏洞利用专题中介绍了如何通过root账号来获取webshell,但在现实情况中,由于Mysql版本较高以及配置文件的缘故,往往无法直接通过root账号写入网站真实路劲下获取 ...
- Spring Cloud断路器Hystrix
在微服务架构中,存在着那么多的服务单元,若一个单元出现故障,就会因依赖关系形成故障蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构就更加的不稳定.为了解决这样的问题,因此产生了断路器模式. 什么是 ...
- [Vue] vue-cli3.0安装
1. node.js安装https://nodejs.org/en/download/ 2.npm的安装 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了.同样可以通过输入 &qu ...
- POJ 2665
#include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("a ...
- [LeetCode] 206. Reverse Linked List_Easy tag: Linked List
Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...