国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java設(shè)計(jì)模式 (一) 模板方法設(shè)計(jì)模式

這篇具有很好參考價(jià)值的文章主要介紹了Java設(shè)計(jì)模式 (一) 模板方法設(shè)計(jì)模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

什么是模板方法設(shè)計(jì)模式?

模板方法設(shè)計(jì)模式是一種行為型設(shè)計(jì)模式,它定義了一個(gè)算法的骨架,并將一些步驟的具體實(shí)現(xiàn)延遲到子類中。模板方法模式可以幫助確保在算法的不同部分中保持一致性,同時(shí)也允許子類根據(jù)需要進(jìn)行具體實(shí)現(xiàn)。

模板方法模式的關(guān)鍵特點(diǎn)包括:

  • 抽象類: 定義一個(gè)抽象類,其中包含一個(gè)模板方法,該方法定義了算法的骨架。這個(gè)抽象類可以包含一些通用的實(shí)現(xiàn)或共享的代碼。
  • 具體步驟: 在抽象類中,將算法的不同步驟定義為抽象方法。這些步驟需要由具體的子類來(lái)實(shí)現(xiàn)。
  • 模板方法: 這是算法的核心方法,它包含了算法的基本步驟,可能包括調(diào)用不同的具體步驟方法。這個(gè)方法通常是 final,以防止子類修改整體算法結(jié)構(gòu)。
  • 鉤子方法:鉤子方法是一種在抽象類中定義的方法,子類可以選擇是否覆蓋它。這些方法通常是空方法,可以在模板方法的執(zhí)行過(guò)程中被調(diào)用,以便影響算法的某些特定步驟。

模板方法設(shè)計(jì)模式的優(yōu)點(diǎn)包括:

  • 提供了一種統(tǒng)一的算法結(jié)構(gòu),使得算法在不同的子類中保持一致。
  • 提供了代碼復(fù)用和共享的機(jī)制,避免了重復(fù)的代碼。
  • 允許子類根據(jù)需要覆蓋特定步驟的實(shí)現(xiàn),實(shí)現(xiàn)了開(kāi)閉原則。

一個(gè)典型的模板方法設(shè)計(jì)模式的例子是 Java 中的 AbstractList 類,它定義了訪問(wèn)和修改列表的算法框架,然后由具體的子類(如 ArrayList、LinkedList 等)實(shí)現(xiàn)不同的細(xì)節(jié)。

總之,模板方法設(shè)計(jì)模式允許您定義一個(gè)算法的骨架,然后將一些具體的步驟延遲到子類中實(shí)現(xiàn)。這種方式提高了代碼的復(fù)用性和可維護(hù)性,同時(shí)也確保了算法的一致性。

模板抽象類


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @author Wang
 */
@Slf4j
public abstract class AbstractSynFileHandler<T> implements InitializingBean {

    /**
     * parseFile
     * @param inputStream   inputStream
     * @return  <T> List<T>
     * @throws IOException  IOException
     */
    public abstract List<T> parseFile(InputStream inputStream) throws IOException;

    /**
     * getHandlerName
     * @return  String
     */
    public abstract String getFileName();


    @Override
    public void afterPropertiesSet(){
        SynFileFactory.registerHandler(getFileName(), this);
    }

}

在這個(gè)代碼片段中,AbstractSynFileHandler 是一個(gè)抽象類,定義了一個(gè)模板方法模式的結(jié)構(gòu)。模板方法模式的關(guān)鍵是抽象類中的模板方法,該方法定義了一個(gè)算法的基本步驟,但是某些步驟的具體實(shí)現(xiàn)留給了子類來(lái)完成。

在這個(gè)代碼中,parseFilegetFileName方法是需要子類實(shí)現(xiàn)的具體步驟。這些步驟的具體實(shí)現(xiàn)因應(yīng)用而異,所以它們被定義為抽象方法。然后,在 afterPropertiesSet方法中,SynFileFactory.registerHandler 方法被調(diào)用,該方法將當(dāng)前實(shí)例注冊(cè)到 SynFileFactory中,實(shí)現(xiàn)了模板方法模式中的模板方法調(diào)用和延遲到子類的具體實(shí)現(xiàn)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-655070.html

子類實(shí)現(xiàn)


import cn.hutool.core.text.CharSequenceUtil;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Wang
 */
@RequiredArgsConstructor
@Slf4j
@Component
public class AccountHandler extends AbstractSynFileHandler<AccountEntity> {


    @Override
    public List<AccountEntity> parseFile(InputStream inputStream) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        List<AccountEntity> list = new ArrayList<>();
        String line;
        int lineNum = 0;
        while ((line = reader.readLine()) != null) {
            if (lineNum == 0) {
                lineNum++;
                continue;
            }
            String[] values = line.split(Cons.Delimiter.WAVY);
            AccountEntity accountEntity = new AccountEntity();
            this.buildEntity(values, accountEntity);
            list.add(accountEntity);
            lineNum++;
        }
        return list;
    }

    private void buildEntity(String[] values, AccountEntity accountEntity) {
        if(CharSequenceUtil.isNotBlank(values[0])){
            accountEntity.setSiebelId(values[0]);
        }
        if(CharSequenceUtil.isNotBlank(values[1])){
            accountEntity.setFirstName(values[1]);
        }
        if(CharSequenceUtil.isNotBlank(values[2])){
            accountEntity.setLastName(values[2]);
        }
        if(CharSequenceUtil.isNotBlank(values[3])){
            accountEntity.setMiddleInitial(values[3]);
        }
        if(CharSequenceUtil.isNotBlank(values[4])){
            accountEntity.setEmail(values[4]);
        }
        if(CharSequenceUtil.isNotBlank(values[5])){
            accountEntity.setCellPhone(values[5]);
        }
        if(CharSequenceUtil.isNotBlank(values[6])){
            accountEntity.setAddress1(values[6]);
        }
        if(CharSequenceUtil.isNotBlank(values[7])){
            accountEntity.setAddress2(values[7]);
        }
        if(CharSequenceUtil.isNotBlank(values[8])){
            accountEntity.setCity(values[8]);
        }
        if(CharSequenceUtil.isNotBlank(values[9])){
            accountEntity.setState(values[9]);
        }
        if(CharSequenceUtil.isNotBlank(values[10])){
            accountEntity.setZip(values[10]);
        }
    }

    @Override
    public String getFileName() {
        return SiebelCons.ACCOUNT;
    }
}

到了這里,關(guān)于Java設(shè)計(jì)模式 (一) 模板方法設(shè)計(jì)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【玩轉(zhuǎn)23種Java設(shè)計(jì)模式】行為型模式篇:模板模式

    軟件設(shè)計(jì)模式(Design pattern),又稱設(shè)計(jì)模式,是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。 匯總目錄鏈接:【玩轉(zhuǎn)23種Java設(shè)計(jì)模式】學(xué)習(xí)目錄匯總

    2024年02月16日
    瀏覽(21)
  • 【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    掌握 抽象類和接口的定義、使用、區(qū)別、常見(jiàn)設(shè)計(jì)模式; 抽象類是代碼開(kāi)發(fā)中的重要組成部分,利用抽象類可以明確地定義子類需要覆寫的方法,這樣相當(dāng)于在語(yǔ)法程度上對(duì)子類進(jìn)行了嚴(yán)格的定義限制,代碼的開(kāi)發(fā)也就更加標(biāo)準(zhǔn)。下面具體介紹抽象類的概念。 普通類可以直

    2024年02月16日
    瀏覽(25)
  • java設(shè)計(jì)模式-工廠方法模式

    java設(shè)計(jì)模式-工廠方法模式

    定義一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口,將產(chǎn)品對(duì)象的實(shí)際創(chuàng)建工作推遲到具體子工廠類當(dāng)中。這滿足創(chuàng)建型模式中所要求的“創(chuàng)建與使用相分離”的特點(diǎn)。 用戶只需要知道具體工廠的名稱就可得到所要的產(chǎn)品,無(wú)須知道產(chǎn)品的具體創(chuàng)建過(guò)程; 在系統(tǒng)增加新的產(chǎn)品時(shí)只需要添加

    2024年02月04日
    瀏覽(29)
  • java設(shè)計(jì)模式【工廠方法模式】

    java設(shè)計(jì)模式【工廠方法模式】

    工廠方法模式 ( FACTORY METHOD )是一種常用的類創(chuàng)建型設(shè)計(jì)模式,此模式的核心精神是封裝類中變化的部分,提取其中個(gè)性化善變的部分為獨(dú)立類,通過(guò)依賴注入以達(dá)到解耦、復(fù)用和方便后期維護(hù)拓展的目的。它的核心結(jié)構(gòu)有四個(gè)角色,分別是抽象工廠;具體工廠;抽象產(chǎn)品;

    2024年02月05日
    瀏覽(30)
  • Java 基礎(chǔ):設(shè)計(jì)模式之工廠方法模式

    工廠方法模式(Factory Method Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一個(gè)創(chuàng)建對(duì)象的通用接口,但將實(shí)際創(chuàng)建邏輯推遲到子類中實(shí)現(xiàn)。這種模式允許客戶端使用抽象接口來(lái)創(chuàng)建特定類型的對(duì)象,而無(wú)需了解具體的實(shí)現(xiàn)細(xì)節(jié)。以下是工廠方法模式的詳細(xì)分析: 一. 定義與目的

    2024年04月29日
    瀏覽(26)
  • Java與設(shè)計(jì)模式(2):工廠方法模式

    工廠方法模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種將對(duì)象的創(chuàng)建委托給子類的方式。在工廠方法模式中,我們定義一個(gè)抽象的工廠類,該類負(fù)責(zé)定義創(chuàng)建對(duì)象的接口,但具體的對(duì)象創(chuàng)建由子類來(lái)實(shí)現(xiàn)。這樣可以將對(duì)象的創(chuàng)建和使用解耦,使得系統(tǒng)更加靈活和可擴(kuò)展。 工廠方

    2024年02月11日
    瀏覽(18)
  • Java工廠方法設(shè)計(jì)模式

    工廠方法模式是 Java 中常用的一種創(chuàng)建型設(shè)計(jì)模式,它通過(guò)定義一個(gè)抽象的工廠接口來(lái)創(chuàng)建對(duì)象,從而將對(duì)象的創(chuàng)建與具體業(yè)務(wù)邏輯分離開(kāi)來(lái),提高了代碼的可維護(hù)性和可讀性。 抽象工廠:定義了創(chuàng)建產(chǎn)品對(duì)象的接口。 具體工廠:實(shí)現(xiàn)了抽象工廠中定義的接口,負(fù)責(zé)創(chuàng)建具

    2024年02月13日
    瀏覽(36)
  • Java設(shè)計(jì)模式 - 學(xué)習(xí)方法

    設(shè)計(jì)模式 軟件設(shè)計(jì)模式(Design pattern),又稱設(shè)計(jì)模式,是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。 在學(xué)習(xí)之前,需要先搞明白兩個(gè)問(wèn)題: 設(shè)計(jì)

    2024年02月07日
    瀏覽(24)
  • 【Java 設(shè)計(jì)模式】創(chuàng)建型之工廠方法模式

    【Java 設(shè)計(jì)模式】創(chuàng)建型之工廠方法模式

    在軟件開(kāi)發(fā)中,工廠方法模式是一種常見(jiàn)的創(chuàng)建型設(shè)計(jì)模式, 它提供了一種將對(duì)象的實(shí)例化延遲到子類的方法 。工廠方法模式通過(guò)定義一個(gè)創(chuàng)建對(duì)象的接口,但是讓子類決定實(shí)例化哪個(gè)類。在本文中,我們將介紹 Java 設(shè)計(jì)模式中的工廠方法模式,了解其定義、使用場(chǎng)景以及

    2024年01月17日
    瀏覽(26)
  • 設(shè)計(jì)模式—模板方法模式

    設(shè)計(jì)模式—模板方法模式

    定義一個(gè)操作的流程框架,而將流程中一些步驟延遲到子類中實(shí)現(xiàn)。使得子類在不改變流程結(jié)構(gòu)的情況下,重新定義流程中的特定步驟。 主要角色: 抽象類: 負(fù)責(zé)給出操作流程的輪廓或框架,由模板方法和若干基本方法組成。 ? 1、抽象方法:由抽象類聲明,在具體子類中實(shí)

    2024年02月10日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包