欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

模擬抽象類:

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

測(cè)試類

/**
* 模板方法模式測(cè)試類
* @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ù)請(qǐng)取號(hào)!
我已經(jīng)填寫過單子,今天就直接等待叫號(hào)了吧!
辦理銀行業(yè)務(wù)請(qǐng)取號(hào)!
我要取500萬大洋
———–分隔線—————-
辦理銀行業(yè)務(wù)請(qǐng)取號(hào)!
我填寫的是辦理銀行卡單據(jù)
辦理銀行業(yè)務(wù)請(qǐng)取號(hào)!
我在辦卡,即將完成!

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

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

相關(guān)文章

  • Java發(fā)送帶html標(biāo)簽內(nèi)容的郵件實(shí)例代碼

    Java發(fā)送帶html標(biāo)簽內(nèi)容的郵件實(shí)例代碼

    下面小編就為大家?guī)硪黄狫ava發(fā)送帶html標(biāo)簽內(nèi)容的郵件實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • java語法糖之jdk迭代的新特性匯總

    java語法糖之jdk迭代的新特性匯總

    什么是語法糖?泛型、自動(dòng)裝箱拆箱、變長(zhǎng)參數(shù)、增強(qiáng)for循環(huán)、switch字符類型、lambda表達(dá)式等,這些其實(shí)都是語法糖。這篇文章主要給大家介紹了關(guān)于java語法糖之jdk迭代的新特性的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • JAVA spark創(chuàng)建DataFrame的方法

    JAVA spark創(chuàng)建DataFrame的方法

    這篇文章主要介紹了JAVA spark創(chuàng)建DataFrame的方法,幫助大家更好的理解和學(xué)習(xí)spark,感興趣的朋友可以了解下
    2020-08-08
  • Java 實(shí)現(xiàn)貪吃蛇游戲的示例

    Java 實(shí)現(xiàn)貪吃蛇游戲的示例

    這篇文章主要介紹了Java 如何實(shí)現(xiàn)貪吃蛇游戲,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • springboot切面添加日志功能實(shí)例詳解

    springboot切面添加日志功能實(shí)例詳解

    在本篇文章里小編給大家整理的是關(guān)于springboot 切面添加日志功能的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。
    2019-09-09
  • Swagger實(shí)現(xiàn)動(dòng)態(tài)條件注入與全局?jǐn)r截功能詳細(xì)流程

    Swagger實(shí)現(xiàn)動(dòng)態(tài)條件注入與全局?jǐn)r截功能詳細(xì)流程

    這篇文章主要介紹了Swagger實(shí)現(xiàn)動(dòng)態(tài)條件注入與全局?jǐn)r截功能詳細(xì)流程,Swagger 可以提供 API 操作的測(cè)試文檔,本文記錄 Swagger 使用過程中遇到的小問題
    2023-01-01
  • spring boot Rabbit高級(jí)教程(最新推薦)

    spring boot Rabbit高級(jí)教程(最新推薦)

    RabbitMQ的消息過期是基于追溯方式來實(shí)現(xiàn)的,也就是說當(dāng)一個(gè)消息的TTL到期以后不一定會(huì)被移除或投遞到死信交換機(jī),而是在消息恰好處于隊(duì)首時(shí)才會(huì)被處理,本篇文章給大家介紹spring boot Rabbit高級(jí)教程,感興趣的朋友一起看看吧
    2023-10-10
  • SpringBoot--Banner的定制和關(guān)閉操作

    SpringBoot--Banner的定制和關(guān)閉操作

    這篇文章主要介紹了SpringBoot--Banner的定制和關(guān)閉操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2018-05-05
  • Java之打印String對(duì)象的地址

    Java之打印String對(duì)象的地址

    這篇文章主要介紹了Java之打印String對(duì)象的地址,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Spring Batch批處理框架使用解析

    Spring Batch批處理框架使用解析

    這篇文章主要介紹了Spring Batch批處理框架使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論