Java经典设计模式之模板方法模式定义与用法示例
本文实例讲述了Java设计模式之模板方法模式。分享给大家供大家参考,具体如下:
我们在生活中,很多事情都包含特定的一些步骤。如去银行办理业务,通常步骤的次序是:取号–>填单–>等待叫号–>办理业务。这几个步骤中,有的是不变的,比如取号,每个人都要取,但有的是要变的,比如都有填单,但是根据不同的业务,填写的单据不同。又比如我们外出吃饭,一般的步骤是:点餐–>等待–>吃饭–>付钱,也能发现同样的规律。这样的事情数不胜数。
项目开发中,也可能遇到这样的情况,多个功能模块,可能有相似或相同的操作步骤,只是其中某一环节或某一个步骤不相同,我们就可以抽取一个或多个公用的父类(模板),让子类实现具体的方法。我们以去银行办理业务为例:
模拟抽象类:
/**
*模板方法模式的模板框架(以去银行办理业务为例)
*@description:
*/
publicabstractclassTempletBankFrame{
/*比如:去柜台办理银行卡业务**/
publicfinalvoidhandleBankCard(){
/*第一步:进入银行大厅取号**/
takeNumber();
/*第二步:填写办理业务的相关单据**/
if(!isNeedThisMethod()){//特殊情况可以添加判断,如我之前有填写好单子,那今天就不必再填写了
writeBill();
}
/*第三步:等待工作人员叫号**/
waitCall();
/*第四步:办理业务**/
handleCard();
}
/*取号步骤是不需要更改的,所以我们用private修饰**/
privatevoidtakeNumber(){
System.out.println("办理银行业务请取号!");
}
/*办理的业务不同,填写的内容不同,所以我们用protected修饰,让子类去处理具体业务**/
protectedabstractvoidwriteBill();
/*等待叫号步骤也是不需要更改的,所以我们用private修饰**/
privatevoidwaitCall(){
System.out.println("办理银行业务请取号!");
}
/*办理的业务不同,用protected修饰,让子类去处理具体业务**/
protectedabstractvoidhandleCard();
/*定义一个钩子方法:由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。**/
protectedabstractbooleanisNeedThisMethod();
}
具体实现类:如办理取钱
/**
*办理取钱业务
*@description:
*/
publicclassGetMoneyextendsTempletBankFrame{
@Override
protectedvoidwriteBill(){
System.out.println("我在填写取钱的单据!");
}
@Override
protectedvoidhandleCard(){
System.out.println("我要取500万大洋");
}
@Override
protectedbooleanisNeedThisMethod(){
System.out.println("我已经填写过单子,今天就直接等待叫号了吧!");
returntrue;
}
}
具体实现类:如我是去办银行卡
/**
*办理银行卡
*@description:
*/
publicclassTackCardextendsTempletBankFrame{
@Override
protectedvoidwriteBill(){
System.out.println("我填写的是办理银行卡单据");
}
@Override
protectedvoidhandleCard(){
System.out.println("我在办卡,即将完成!");
}
@Override
protectedbooleanisNeedThisMethod(){
returnfalse;
}
}
测试类
/**
*模板方法模式测试类
*@description:
*/
publicclassTest{
publicstaticvoidmain(String[]args){
GetMoneymoney=newGetMoney();
money.handleBankCard();//调用模板中的办理业务方法
System.out.println("———–分隔线—————-");
TackCardcard=newTackCard();
card.handleBankCard();
}
}
最后的输出结果:
办理银行业务请取号! 我已经填写过单子,今天就直接等待叫号了吧! 办理银行业务请取号! 我要取500万大洋 ———–分隔线—————- 办理银行业务请取号! 我填写的是办理银行卡单据 办理银行业务请取号! 我在办卡,即将完成!
更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。