设计模式之模板方法模式(行为型)
文章目录
- 一、模式定义
- 二、模式角色
- 三、模式分析
- 四、具体例子
- 五、模式应用场景
一、模式定义
模板方法模式就是在一个抽象类中定义一些骨架方法,然后通过类继承的方法,将一些方法延迟到继承类里。模板方法模式是一种类行为型模式,是一种比较常用的方法。不属于对象行为型模式,因为只是通过类继承实现。
Template Method Pattern: 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(实现类)
三、模式分析
模板方法,将基本方法封装组合在一个抽象类中形成一个总算法或者说一个总行为的方法。
模板方法的组成部分:
- 抽象方法(Abstract Method)
- 具体方法(Concrete Method)
- 钩子方法(HookMethod)
抽象类代码:
public abstract class AbstractClass
{public void templateMethod() //模板方法{primitiveOperation1();primitiveOperation2();primitiveOperation3();}public void operation1() //基本方法-具体方法{//实现代码}public abstract void operation2(); //基本方法-抽象方法public void operation3() //基本方法-钩子方法{}
}
具体实现类代码:
public abstract class ConcreteClass
{/*** 基本方法-抽象方法*/public abstract void operation2(){//具体实现} /*** 基本方法-钩子方法*/public void operation3(){//具体实现}
}
子类不显性调用父类的方法,而是通过继承的方法来实现具体的业务方法,也就是说父类控制子类的调用,这种机制叫好莱坞原则。好莱坞原则的定义为:“不要给我们打电话,我们会给你打电话(Don‘t call us, we’ll call you)”。
四、具体例子
数据库操作的例子。数据库操作分为连接、打开、使用、关闭步骤。现在要使用mysql、oracle、db2等等关系型数据库进行数据库操作工具类的编写。而对于使用这几种不同的数据库,其实只是连接的代码不同,而其它操作的代码都是差不多的,所以可以使用模板方法进行代码复用。
ps:这个例子来自《设计模式》一书,稍微改了一点
模板方法
public abstract class DBOperator
{
//抽象方法public abstract void connDB();public void openDB(){System.out.println("打开数据库");}public void useDB(){System.out.println("使用数据库");}public void closeDB(){System.out.println("关闭数据库"); }//模板方法public void process(){connDB();openDB();useDB();closeDB();}
}
mysql数据库
public class DBOperatorMysql extends DBOperator
{public void connDB(){System.out.println("使用JDBC-ODBC桥接连接Mysql数据库"); }
}
Oracle数据库
public class DBOperatorOracle extends DBOperator
{public void connDB(){System.out.println("使用JDBC-ODBC桥接连接Oracle数据库"); }
}
调用
class Client
{public static void main(String a[]){DBOperator db1;db1=new DBOperatorMysql();db1.process();db1=new DBOperatorOracle();db1.process();}
}
五、模式应用场景
- Spring、Struts2框架的应用,比如框架的初始化就有应用
…
设计模式之模板方法模式(行为型)相关推荐
- Java设计模式之模板方法模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- 设计模式之模板方法模式(TemplateMethod)
设计模式之模板方法模式 模板方法模式 代码实现 模式的应用 模板方法模式 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现 ...
- 设计模式-04.模板方法模式
设计模式-04.模板方法模式 模板方法模式 定义 介绍 实现 优点 缺点 使用场景 扩展 定义 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类 ...
- 一篇博客读懂设计模式之---模板方法模式
设计模式之模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 简而言之就是:父类定义了骨架(调用哪些方法及其 ...
- 设计模式之模板方法模式详解
设计模式之模板方法模式详解 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的 ...
- php templete什么意思,PHP设计模式之模板方法模式定义与用法详解
本文实例讲述了PHP设计模式之模板方法模式定义与用法.分享给大家供大家参考,具体如下: 什么是模板方法模式 模板方法(Template Method)设计模式中使用了一个类方法templateMeth ...
- 【设计模式】模板方法模式(C#)
[设计模式]模板方法模式 1.概述 背景 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某 ...
- 【Java】设计模式之模板方法模式
- 好记性不如烂笔头,特将设计模式之模板方法模式记录在我的小仓库. 文章目录 什么是模板方法模式 案例 什么是模板方法模式 简而言之就是一套算法可以适用于多个类,则进行的步骤汇总,让子类别在不改变算法 ...
- Carson带你学设计模式:模板方法模式(Template Method)
前言 今天Carson来全面总结最常用的设计模式 - 模板方法模式. Carson带你学设计模式系列文章 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南 Carson带你 ...
最新文章
- Machine Learning | 机器学习简介
- 关闭linux服务器电源,linux关闭ACPI电源管理模块
- torch The “freeze_support()” line can be omitted if the programis not going to be frozen to produce
- python 多进程multiprocessing 如何获取子进程的返回值?进程池pool,apply_async(),get(),
- Homebrew软件包管理器中发现RCE漏洞,小心你的Mac和Linux
- c语言题库325,2012年二级C语言笔试模拟325
- 前端开发工程师面试题
- 点互信息PMI(Pointwise Mutual Information)
- CSharpGL(13)用GLSL实现点光源(point light)和平行光源(directional light)的漫反射(diffuse reflection)...
- DEBUG指示灯详细说明
- JAVA_抽象类和接口
- H5 LayaAir实现复制微信号到剪切板功能
- Google Play 应用内购买限制国家地区政策更新
- STI解读A:STI测量方法
- 计算机原码 反码 和 补码
- 计算机五子棋博弈发展历史,五子棋计算机博弈系统的研究与设计
- 中国互联网2010年最佳阵容(漫画版)
- 怎样修改日立uax规格表_日立电梯UAX电气原理图纸维修调试资料手册规格表.zip-3-1敷线检查.doc...
- 正版动态素材怎么下载?教你一键快速下载gif素材
- Gson 解析Json 原文地址:http://www.open-open.com/lib/view/open1472632967912.html