全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java经典设计模式之模板方法模式定义与用法示例

本文实例讲述了Java设计模式之模板方法模式。分享给大家供大家参考,具体如下:

我们在生活中,很多事情都包含特定的一些步骤。如去银行办理业务,通常步骤的次序是:取号 –> 填单 –> 等待叫号–>办理业务。这几个步骤中,有的是不变的,比如取号,每个人都要取,但有的是要变的,比如都有填单,但是根据不同的业务,填写的单据不同。又比如我们外出吃饭,一般的步骤是:点餐–>等待–>吃饭–>付钱,也能发现同样的规律。这样的事情数不胜数。

项目开发中,也可能遇到这样的情况,多个功能模块,可能有相似或相同的操作步骤,只是其中某一环节或某一个步骤不相同,我们就可以抽取一个或多个公用的父类(模板),让子类实现具体的方法。我们以去银行办理业务为例:

模拟抽象类:

/**
* 模板方法模式的模板框架(以去银行办理业务为例)
* @description:
*/
public abstract class TempletBankFrame {
/* 比如:去柜台办理银行卡业务* */
public final void handleBankCard() {
/* 第一步:进入银行大厅取号* */
takeNumber();
/* 第二步:填写办理业务的相关单据* */
if(!isNeedThisMethod()){//特殊情况可以添加判断,如我之前有填写好单子,那今天就不必再填写了
writeBill();
}
/* 第三步:等待工作人员叫号* */
waitCall();
/* 第四步:办理业务* */
handleCard();
}
/* 取号步骤是不需要更改的,所以我们用private修饰* */
private void takeNumber() {
  System.out.println("办理银行业务请取号!");
}
/* 办理的业务不同,填写的内容不同,所以我们用protected修饰,让子类去处理具体业务* */
protected abstract void writeBill();
/* 等待叫号步骤也是不需要更改的,所以我们用private修饰* */
private void waitCall() {
  System.out.println("办理银行业务请取号!");
}
/* 办理的业务不同,用protected修饰,让子类去处理具体业务* */
protected abstract void handleCard();
/*定义一个钩子方法:由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。**/
protected abstract boolean isNeedThisMethod();
}

具体实现类:如办理取钱

/**
* 办理取钱业务
* @description:
*/
public class GetMoney extends TempletBankFrame {
@Override
protected void writeBill() {
  System.out.println("我在填写取钱的单据!");
}
@Override
protected void handleCard() {
  System.out.println("我要取500万大洋");
}
@Override
protected boolean isNeedThisMethod() {
  System.out.println("我已经填写过单子,今天就直接等待叫号了吧!");
  return true;
}
}

具体实现类:如我是去办银行卡

/**
* 办理银行卡
* @description:
*/
public class TackCard extends TempletBankFrame {
@Override
protected void writeBill() {
  System.out.println("我填写的是办理银行卡单据");
}
@Override
protected void handleCard() {
  System.out.println("我在办卡,即将完成!");
}
@Override
protected boolean isNeedThisMethod() {
  return false;
}
}

测试类

/**
* 模板方法模式测试类
* @description:
*/
public class Test {
public static void main(String[] args) {
GetMoney money=new GetMoney();
money.handleBankCard();//调用模板中的办理业务方法
System.out.println("———–分隔线—————-");
TackCard card=new TackCard();
card.handleBankCard();
}
}

最后的输出结果:

办理银行业务请取号!
我已经填写过单子,今天就直接等待叫号了吧!
办理银行业务请取号!
我要取500万大洋
———–分隔线—————-
办理银行业务请取号!
我填写的是办理银行卡单据
办理银行业务请取号!
我在办卡,即将完成!

更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


# Java  # 设计模式  # 模板方法模式  # Java设计模式之模板方法模式Template Method Pattern详解  # Java设计模式之模板方法模式  # Java设计模式之模板方法模式详解  # 深入理解Java设计模式之模板方法模式  # Java设计模式之浅谈模板方法模式  # 举例讲解Java设计模式编程中模板方法模式的运用实例  # 深入解析Java的设计模式编程中的模板方法模式  # Java模板方法模式定义算法框架  # 子类  # 务请  # 我在  # 的是  # 我要  # 多个  # 不需要  # 取钱  # 为例  # 抽象类  # 写过  # 有的是  # 我已经  # 号了  # 是一个  # 操作技巧  # 我是  # 都有  # 分隔线  # 相关内容 


相关文章: 中山网站制作网页,中山新生登记系统登记流程?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星价格显示格式升级,你的预算足够吗?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  建站之星会员如何解锁更多建站功能?  如何打造高效商业网站?建站目的决定转化率  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  如何快速上传建站程序避免常见错误?  活动邀请函制作网站有哪些,活动邀请函文案?  如何在阿里云域名上完成建站全流程?  如何在服务器上配置二级域名建站?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  简单实现Android验证码  如何制作网站标识牌,动态网站如何制作(教程)?  建站主机是什么?如何选择适合的建站主机?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何在Tomcat中配置并部署网站项目?  建站与域名管理如何高效结合?  如何用腾讯建站主机快速创建免费网站?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  如何生成腾讯云建站专用兑换码?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  ,交易猫的商品怎么发布到网站上去?  如何快速搭建高效可靠的建站解决方案?  内网网站制作软件,内网的网站如何发布到外网?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  网站网页制作专业公司,怎样制作自己的网页?  网站制作新手教程,新手建设一个网站需要注意些什么?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  制作网站的模板软件,网站怎么建设?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何快速启动建站代理加盟业务?  用v-html解决Vue.js渲染中html标签不被解析的问题  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  如何快速查询网址的建站时间与历史轨迹?  如何设计高效校园网站?  如何高效利用亚马逊云主机搭建企业网站?  济南专业网站制作公司,济南信息工程学校怎么样?  如何通过PHP快速构建高效问答网站功能?  如何选择高效响应式自助建站源码系统?  网站制作免费,什么网站能看正片电影?  如何通过西部建站助手安装IIS服务器?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  建站之星伪静态规则如何正确配置?  如何获取PHP WAP自助建站系统源码?  建站之星备案是否影响网站上线时间?  测试制作网站有哪些,测试性取向的权威测试或者网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。