登录  /  注册
首页 > Java > java教程 > 正文

Java经典设计模式中关于模板方法模式定义与用法的代码实例

黄舟
发布: 2017-08-10 09:19:57
原创
993人浏览过

这篇文章主要介绍了java经典设计模式之模板方法模式,简单说明了模板方法模式的原理、定义,并结合实例形式分析了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经典设计模式中关于模板方法模式定义与用法的代码实例的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号