JAVA设计模式之:模板方法模式
来源:互联网 发布:如何查找淘宝买家信息 编辑:程序博客网 时间:2024/06/11 20:58
我们在生活中,很多事情都包含特定的一些步骤。如去银行办理业务,通常步骤的次序是:取号 –> 填单 –> 等待叫号–>办理业务。这几个步骤中,有的是不变的,比如取号,每个人都要取,但有的是要变的,比如都有填单,但是根据不同的业务,填写的单据不同。又比如我们外出吃饭,一般的步骤是:点餐–>等待–>吃饭–>付钱,也能发现同样的规律。这样的事情数不胜数。
项目开发中,也可能遇到这样的情况,多个功能模块,可能有相似或相同的操作步骤,只是其中某一环节或某一个步骤不相同,我们就可以抽取一个或多个公用的父类(模板),让子类实现具体的方法。我们以去银行办理业务为例:
模拟抽象类:
/**
* 模板方法模式的模板框架(以去银行办理业务为例)
* @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 {
@Overrideprotected void writeBill() { System.out.println("我在填写取钱的单据!");}@Overrideprotected void handleCard() { System.out.println("我要取500万大洋");}@Overrideprotected boolean isNeedThisMethod() { System.out.println("我已经填写过单子,今天就直接等待叫号了吧!"); return true;}
}
————具体实现类:如我是去办银行卡————————-
/**
* 办理银行卡
* @description:
*/
public class TackCard extends TempletBankFrame {
@Overrideprotected void writeBill() { System.out.println("我填写的是办理银行卡单据");}@Overrideprotected void handleCard() { System.out.println("我在办卡,即将完成!");}@Overrideprotected 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设计模式之模板方法模式
- Java设计模式之模板方法模式
- JAVA-设计模式之模板方法模式
- Java--设计模式之模板方法模式
- java设计模式之模板方法模式
- 《Java设计模式》之模板方法模式
- JAVA设计模式之:模板方法模式
- 【java】设计模式之模板方法模式
- java设计模式之模板方法模式
- Java设计模式之模板方法模式
- Java设计模式之模板方法模式
- Java设计模式之模板方法模式
- java设计模式之模板方法模式
- JAVA设计模式之模板方法模式
- java设计模式之模板方法模式
- java设计模式之模板方法模式
- 抓取网页的gzip/deflate
- HDU 5595 GTW likes math
- hadoop job解决大数据量关联时数据倾斜的一种办法
- 大话操作系统(1)基本概念
- 开放API(OpenAPI)
- JAVA设计模式之:模板方法模式
- Android5.0风格EditText输入框效果
- linux grep命令
- JAVA并行异步编程,线程池+FutureTask(分享来自推酷)
- android:layout_weight设置解读
- Bonfire: Where art thou
- 一份不可多得的健身房健身计划
- solr教程,值得刚接触搜索开发人员一看
- hibernate-annotation注解解释