最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java經(jīng)典設(shè)計模式之模板方法模式定義與用法示例

 更新時間:2017年08月10日 09:00:35   作者:遲做總比不做強(qiáng)  
這篇文章主要介紹了Java經(jīng)典設(shè)計模式之模板方法模式,簡單說明了模板方法模式的原理、定義,并結(jié)合實(shí)例形式分析了java模板方法模式的具體使用方法,需要的朋友可以參考下

本文實(shí)例講述了Java設(shè)計模式之模板方法模式。分享給大家供大家參考,具體如下:

我們在生活中,很多事情都包含特定的一些步驟。如去銀行辦理業(yè)務(wù),通常步驟的次序是:取號 –> 填單 –> 等待叫號–>辦理業(yè)務(wù)。這幾個步驟中,有的是不變的,比如取號,每個人都要取,但有的是要變的,比如都有填單,但是根據(jù)不同的業(yè)務(wù),填寫的單據(jù)不同。又比如我們外出吃飯,一般的步驟是:點(diǎn)餐–>等待–>吃飯–>付錢,也能發(fā)現(xiàn)同樣的規(guī)律。這樣的事情數(shù)不勝數(shù)。

項目開發(fā)中,也可能遇到這樣的情況,多個功能模塊,可能有相似或相同的操作步驟,只是其中某一環(huán)節(jié)或某一個步驟不相同,我們就可以抽取一個或多個公用的父類(模板),讓子類實(shí)現(xiàn)具體的方法。我們以去銀行辦理業(yè)務(wù)為例:

模擬抽象類:

/**
* 模板方法模式的模板框架(以去銀行辦理業(yè)務(wù)為例)
* @description:
*/
public abstract class TempletBankFrame {
/* 比如:去柜臺辦理銀行卡業(yè)務(wù)* */
public final void handleBankCard() {
/* 第一步:進(jìn)入銀行大廳取號* */
takeNumber();
/* 第二步:填寫辦理業(yè)務(wù)的相關(guān)單據(jù)* */
if(!isNeedThisMethod()){//特殊情況可以添加判斷,如我之前有填寫好單子,那今天就不必再填寫了
writeBill();
}
/* 第三步:等待工作人員叫號* */
waitCall();
/* 第四步:辦理業(yè)務(wù)* */
handleCard();
}
/* 取號步驟是不需要更改的,所以我們用private修飾* */
private void takeNumber() {
  System.out.println("辦理銀行業(yè)務(wù)請取號!");
}
/* 辦理的業(yè)務(wù)不同,填寫的內(nèi)容不同,所以我們用protected修飾,讓子類去處理具體業(yè)務(wù)* */
protected abstract void writeBill();
/* 等待叫號步驟也是不需要更改的,所以我們用private修飾* */
private void waitCall() {
  System.out.println("辦理銀行業(yè)務(wù)請取號!");
}
/* 辦理的業(yè)務(wù)不同,用protected修飾,讓子類去處理具體業(yè)務(wù)* */
protected abstract void handleCard();
/*定義一個鉤子方法:由抽象類聲明并實(shí)現(xiàn),而子類會加以擴(kuò)展。通常抽象類給出的實(shí)現(xiàn)是一個空實(shí)現(xiàn),作為方法的默認(rèn)實(shí)現(xiàn)。**/
protected abstract boolean isNeedThisMethod();
}

具體實(shí)現(xiàn)類:如辦理取錢

/**
* 辦理取錢業(yè)務(wù)
* @description:
*/
public class GetMoney extends TempletBankFrame {
@Override
protected void writeBill() {
  System.out.println("我在填寫取錢的單據(jù)!");
}
@Override
protected void handleCard() {
  System.out.println("我要取500萬大洋");
}
@Override
protected boolean isNeedThisMethod() {
  System.out.println("我已經(jīng)填寫過單子,今天就直接等待叫號了吧!");
  return true;
}
}

具體實(shí)現(xiàn)類:如我是去辦銀行卡

/**
* 辦理銀行卡
* @description:
*/
public class TackCard extends TempletBankFrame {
@Override
protected void writeBill() {
  System.out.println("我填寫的是辦理銀行卡單據(jù)");
}
@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();//調(diào)用模板中的辦理業(yè)務(wù)方法
System.out.println("———–分隔線—————-");
TackCard card=new TackCard();
card.handleBankCard();
}
}

最后的輸出結(jié)果:

辦理銀行業(yè)務(wù)請取號!
我已經(jīng)填寫過單子,今天就直接等待叫號了吧!
辦理銀行業(yè)務(wù)請取號!
我要取500萬大洋
———–分隔線—————-
辦理銀行業(yè)務(wù)請取號!
我填寫的是辦理銀行卡單據(jù)
辦理銀行業(yè)務(wù)請取號!
我在辦卡,即將完成!

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • SpringMVC異常處理知識點(diǎn)總結(jié)

    SpringMVC異常處理知識點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于SpringMVC異常處理相關(guān)知識點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-10-10
  • Dubbo本地調(diào)試的幾種方式總結(jié)

    Dubbo本地調(diào)試的幾種方式總結(jié)

    dubbo服務(wù)方啟動時需要加載的東西太多,如果跑單元測試把服務(wù)開啟會浪費(fèi)不少時間,而且單元測試沒法保持服務(wù)一直開啟的狀態(tài),這篇文章主要給大家介紹了關(guān)于Dubbo本地調(diào)試的幾種方式,需要的朋友可以參考下
    2022-11-11
  • 解決Maven依賴沖突的方法

    解決Maven依賴沖突的方法

    本文主要介紹了解決Maven依賴沖突的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java中ClassLoader類加載學(xué)習(xí)總結(jié)

    Java中ClassLoader類加載學(xué)習(xí)總結(jié)

    本篇文章主要給大家講述了Java中ClassLoader類加載的原理以及用法總結(jié),一起學(xué)習(xí)下。
    2017-12-12
  • 詳解IDEA中類加載器調(diào)用getResourceAsStream()方法需注意的問題

    詳解IDEA中類加載器調(diào)用getResourceAsStream()方法需注意的問題

    這篇文章主要介紹了詳解IDEA中類加載器調(diào)用getResourceAsStream()方法需注意的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java實(shí)現(xiàn)的計算最大下標(biāo)距離算法示例

    Java實(shí)現(xiàn)的計算最大下標(biāo)距離算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的計算最大下標(biāo)距離算法,涉及java針對數(shù)組的遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • Java使用反射獲取字段屬性

    Java使用反射獲取字段屬性

    這篇文章主要為大家詳細(xì)介紹了Java如何利用反射實(shí)現(xiàn)獲取字段屬性值,文中的示例代碼講解詳細(xì),具有很好的參考價值,希望對大家有所幫助
    2023-06-06
  • Spring RedirectAttributes參數(shù)跳轉(zhuǎn)代碼實(shí)例

    Spring RedirectAttributes參數(shù)跳轉(zhuǎn)代碼實(shí)例

    這篇文章主要介紹了Spring RedirectAttributes參數(shù)跳轉(zhuǎn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java基礎(chǔ)之toString的序列化 匿名對象 復(fù)雜度精解

    Java基礎(chǔ)之toString的序列化 匿名對象 復(fù)雜度精解

    序列化即為把內(nèi)存中的對象轉(zhuǎn)換為字節(jié)寫入文件或通過網(wǎng)絡(luò)傳輸?shù)竭h(yuǎn)端服務(wù)器,本章節(jié)將帶你了解Java toString的序列化 匿名對象 復(fù)雜度,需要的朋友可以參考下
    2021-09-09
  • spring @Validated 注解開發(fā)中使用group分組校驗的實(shí)現(xiàn)

    spring @Validated 注解開發(fā)中使用group分組校驗的實(shí)現(xiàn)

    這篇文章主要介紹了spring @Validated 注解開發(fā)中使用group分組校驗的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論

库伦旗| 三亚市| 通州区| 额尔古纳市| 大港区| 涪陵区| 清流县| 吐鲁番市| 太和县| 长岛县| 苗栗市| 大埔县| 平果县| 老河口市| 德兴市| 合江县| 南岸区| 云安县| 利川市| 金溪县| 伊金霍洛旗| 柞水县| 旬阳县| 姚安县| 德庆县| 乌审旗| 庆城县| 贵州省| 富锦市| 贡山| 白银市| 九寨沟县| 东乡县| 呼图壁县| 巩义市| 和田县| 广德县| 环江| 宿迁市| 井研县| 特克斯县|