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

設(shè)計(jì)模式-責(zé)任鏈模式

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

遇到一個(gè)面試的場(chǎng)景題目,讓實(shí)現(xiàn)稅率的計(jì)算

請(qǐng)使用Java語(yǔ)言實(shí)現(xiàn)如下稅率計(jì)算:
1~5000 稅率 0
5001~8000 3%
8001~17000 10%
17001~30000 20%
30001~40000 25%
40001~60000 30%
60001~85000 35%
85001~ 45%
要求
ⅰ. 邏輯正確,代碼優(yōu)雅
ⅱ. 可擴(kuò)展性,考慮區(qū)間的變化,比如說(shuō)起征點(diǎn)從5000變成10000等等,或者說(shuō)85000以上的征稅50%。
ⅲ. 推薦使用合適的設(shè)計(jì)模式
這里舉個(gè)例子,比如說(shuō)稅前10000元,5000部分是不扣稅,后面5000,3000扣稅3%,2000扣稅10%。

?這里考慮使用責(zé)任鏈的模式實(shí)現(xiàn)
這里先實(shí)現(xiàn)了一個(gè)基本的Handler(其實(shí)也可以不用,因?yàn)檫@里實(shí)際上只給了一個(gè)實(shí)現(xiàn)handler),當(dāng)有多個(gè)的時(shí)候需要一個(gè)共同的父類(lèi)

package com.zhs.demoutil.chain;

import lombok.Data;

@Data
public abstract class BasePriceHandler{

    private BasePriceHandler nextHandler;

    public void setHandler(BasePriceHandler handler) {
        this.nextHandler = handler;
    }
    // 計(jì)算價(jià)格,這里交給子類(lèi)實(shí)現(xiàn)
    protected abstract double calculatePrice(double amount);
    // 計(jì)算下一個(gè),如果有下一個(gè)的話(huà)
    protected double calculatePriceNext(double quantity) {
        if (nextHandler != null) {
            return nextHandler.calculatePrice(quantity);
        } else {
            return 0.0;
        }
    }
}

這里是具體的實(shí)現(xiàn)的一個(gè)段的一個(gè)率的計(jì)算方式

package com.zhs.demoutil.chain;

class TieredPricingHandler extends BasePriceHandler {
    // 數(shù)額
    private final double start;
    // 頂部金額,也就是在這區(qū)間進(jìn)行計(jì)算稅
    private final double end;
    // 對(duì)應(yīng)稅率
    private final double tierPrice;



    public TieredPricingHandler(double start,double end, double tierPrice) {
        this.start = start;
        this.end = end;
        this.tierPrice = tierPrice;
    }

	// 具體的計(jì)算
    public double calculatePrice(double amount) {
        // 只有大于這個(gè)start的時(shí)候才需要用到這個(gè)handler,不然就可以直接算0
        if (amount > start) {
            double totalPrice = Math.min((amount-start),end-start) * tierPrice/100;
            double remainingPrice = calculatePriceNext(amount);
            return totalPrice + remainingPrice;
        }
        return 0;
    }
}

增加一個(gè)鏈的類(lèi),用來(lái)組對(duì)應(yīng)的鏈結(jié)構(gòu)

package com.zhs.demoutil.chain;

class PricingHandlerChain {
    private BasePriceHandler headHandler;

    public void addHandler(BasePriceHandler handler) {
        if (headHandler == null) {
            headHandler = handler;
        } else {
            BasePriceHandler currentHandler = headHandler;
            while (currentHandler.getNextHandler() != null) {
                currentHandler = currentHandler.getNextHandler();
            }
            currentHandler.setNextHandler(handler);
        }
    }

    public double calculatePrice(int quantity) {
        if (headHandler != null) {
            return headHandler.calculatePrice(quantity);
        } else {
            return 0.0;
        }
    }
}

測(cè)試的執(zhí)行類(lèi)

package com.zhs.demoutil.chain;

public class Main {
    public static void main(String[] args) {
        PricingHandlerChain pricingHandlerChain = new PricingHandlerChain();
    	// 這里就是直接創(chuàng)建對(duì)應(yīng)的handler然后加入到鏈里面
        pricingHandlerChain.addHandler(new TieredPricingHandler(0,5000, 0));
        pricingHandlerChain.addHandler(new TieredPricingHandler(5000,8000, 3));
        pricingHandlerChain.addHandler(new TieredPricingHandler(8000,17000, 10));
        pricingHandlerChain.addHandler(new TieredPricingHandler(17000,30000, 20));
        pricingHandlerChain.addHandler(new TieredPricingHandler(30000,40000, 25));
        pricingHandlerChain.addHandler(new TieredPricingHandler(40000,60000, 30));
        pricingHandlerChain.addHandler(new TieredPricingHandler(60000,85000, 35));
        pricingHandlerChain.addHandler(new TieredPricingHandler(85000,Integer.MAX_VALUE, 45));

        int quantity = 10000;
        double price = pricingHandlerChain.calculatePrice(quantity);
        System.out.println("數(shù)量:" + quantity);
        System.out.println("費(fèi)用:" + price);
    }
}

這里就是責(zé)任鏈模式的實(shí)現(xiàn)了稅率的計(jì)算,只要是責(zé)任鏈,基本套路就是一樣的,可以定一個(gè)基類(lèi),然后子類(lèi)就去繼承,然后實(shí)現(xiàn)對(duì)應(yīng)的處理邏輯,可以在父類(lèi)里面直接調(diào)用下一個(gè),然后子類(lèi)里面實(shí)現(xiàn)當(dāng)前符合的計(jì)算邏輯,最后加一個(gè)Chain類(lèi)進(jìn)行組鏈,調(diào)用鏈的計(jì)算方法就可以了文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-667751.html

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • 【設(shè)計(jì)模式】Java 設(shè)計(jì)模式之責(zé)任鏈模式(Chain of Responsibility)

    責(zé)任鏈模式(Chain of Responsibility) 一、概述 責(zé)任鏈模式是一種行為設(shè)計(jì)模式,它允許請(qǐng)求在對(duì)象鏈中傳遞。每個(gè)對(duì)象都有機(jī)會(huì)處理該請(qǐng)求,并且能將其傳遞給鏈中的下一個(gè)對(duì)象。這種模式為請(qǐng)求創(chuàng)建了一個(gè)處理對(duì)象的鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理它為止

    2024年03月22日
    瀏覽(25)
  • 【玩轉(zhuǎn)23種Java設(shè)計(jì)模式】行為型模式篇:責(zé)任鏈模式

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

    2024年02月13日
    瀏覽(18)
  • Java設(shè)計(jì)模式—責(zé)任鏈模式(Chin of Responsibility)

    Java設(shè)計(jì)模式—責(zé)任鏈模式(Chin of Responsibility)

    目錄 前言 一、責(zé)任鏈模式的簡(jiǎn)介 二、責(zé)任鏈模式的概念 三、責(zé)任鏈模式的作用 四、責(zé)任鏈模式的優(yōu)、缺點(diǎn) 1.責(zé)任鏈模式的優(yōu)點(diǎn) 2.責(zé)任鏈模式的缺點(diǎn) 五、責(zé)任鏈模式的應(yīng)用場(chǎng)景 六、代碼案例 UML類(lèi)圖 ?1.定義一個(gè)請(qǐng)求枚舉類(lèi) ?2.定義一個(gè)請(qǐng)求類(lèi) 3.定義一個(gè)抽象處理接口 4、定

    2024年02月08日
    瀏覽(27)
  • Java設(shè)計(jì)模式-責(zé)任鏈(Chain of Responsibility)模式

    Java設(shè)計(jì)模式-責(zé)任鏈(Chain of Responsibility)模式

    Java責(zé)任鏈(Chain of Responsibility)設(shè)計(jì)模式是指很多處理對(duì)象構(gòu)成一個(gè)鏈,鏈中前一個(gè)對(duì)象指向后一個(gè)對(duì)象。請(qǐng)求在鏈中傳遞,一個(gè)請(qǐng)求可以被一個(gè)或者多個(gè)對(duì)象處理。調(diào)用方(即客戶(hù)端)不知道請(qǐng)求會(huì)被鏈中的哪個(gè)對(duì)象處理,所以責(zé)任鏈模式可以方便組織責(zé)任鏈而不影響調(diào)用

    2024年02月16日
    瀏覽(19)
  • Java 大廠(chǎng)八股文面試專(zhuān)題-設(shè)計(jì)模式 工廠(chǎng)方法模式、策略模式、責(zé)任鏈模式

    Java 大廠(chǎng)八股文面試專(zhuān)題-設(shè)計(jì)模式 工廠(chǎng)方法模式、策略模式、責(zé)任鏈模式

    ????????在平時(shí)的開(kāi)發(fā)中,涉及到設(shè)計(jì)模式的有兩塊內(nèi)容,第一個(gè)是我們 平時(shí)使用的框架 (比如spring、mybatis等),第二個(gè)是我們自己開(kāi)發(fā)業(yè)務(wù)使用的設(shè)計(jì)模式。 ????????面試官一般比較關(guān)心的是你在開(kāi)發(fā)過(guò)程中, 有沒(méi)有使用過(guò)設(shè)計(jì)模式,或者你在簡(jiǎn)歷上寫(xiě)了關(guān)于設(shè)計(jì)

    2024年02月10日
    瀏覽(29)
  • Java設(shè)計(jì)模式之責(zé)任鏈模式(UML類(lèi)圖分析+代碼詳解)

    Java設(shè)計(jì)模式之責(zé)任鏈模式(UML類(lèi)圖分析+代碼詳解)

    大家好,我是一名在算法之路上不斷前進(jìn)的小小程序猿!體會(huì)算法之美,領(lǐng)悟算法的智慧~ 希望各位博友走過(guò)路過(guò)可以給我點(diǎn)個(gè)免費(fèi)的贊,你們的支持是我不斷前進(jìn)的動(dòng)力!! 加油吧!未來(lái)可期?。?本文將介紹java設(shè)計(jì)模式之責(zé)任鏈模式 OA系統(tǒng)采購(gòu)審批需求 傳統(tǒng)方案解決OA系

    2024年02月06日
    瀏覽(16)
  • Java設(shè)計(jì)模式之行為型-責(zé)任鏈模式(UML類(lèi)圖+案例分析)

    Java設(shè)計(jì)模式之行為型-責(zé)任鏈模式(UML類(lèi)圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類(lèi)圖 三、角色設(shè)計(jì) 四、案例分析 4.1、在Java中實(shí)現(xiàn) 4.2、在SpringBoot中實(shí)現(xiàn)? 五、總結(jié)? 責(zé)任鏈模式是一種行為設(shè)計(jì)模式,它允許你將請(qǐng)求沿著處理者鏈進(jìn)行發(fā)送。請(qǐng)求會(huì)被鏈上每個(gè)處理者處理,直到請(qǐng)求被處理完畢。該模式主要解決的是請(qǐng)求的發(fā)送者和

    2024年02月15日
    瀏覽(22)
  • 《設(shè)計(jì)模式》責(zé)任鏈模式

    《設(shè)計(jì)模式》責(zé)任鏈模式

    定義 : 責(zé)任鏈模式將鏈中每一個(gè)節(jié)點(diǎn)都看成一個(gè)對(duì)象,并且將這些節(jié)點(diǎn)對(duì)象連成一條鏈,請(qǐng)求會(huì)沿著這條鏈進(jìn)行傳遞,直到有對(duì)象處理它為止,這使得多個(gè)對(duì)象都有機(jī)會(huì)接收請(qǐng)求,避免了請(qǐng)求發(fā)送者和接收者之間的耦合。 屬于 行為型 設(shè)計(jì)模式。 責(zé)任鏈模式的角色組成 :

    2024年02月13日
    瀏覽(17)
  • 設(shè)計(jì)模式:責(zé)任鏈模式

    責(zé)任鏈模式(Chain of Responsibility Pattern)是一種行為型設(shè)計(jì)模式,它允許多個(gè)對(duì)象按照順序處理請(qǐng)求,直到其中一個(gè)對(duì)象能夠處理該請(qǐng)求為止。責(zé)任鏈模式將請(qǐng)求發(fā)送者和接收者解耦,使得多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,同時(shí)避免了請(qǐng)求發(fā)送者與接收者之間的直接耦合關(guān)系。 在

    2024年02月07日
    瀏覽(21)
  • 【設(shè)計(jì)模式】責(zé)任鏈模式

    【設(shè)計(jì)模式】責(zé)任鏈模式

    顧名思義,責(zé)任鏈模式(Chain of Responsibility Pattern)為請(qǐng)求創(chuàng)建了一個(gè)接收者對(duì)象的鏈。這種模式給予請(qǐng)求的類(lèi)型,對(duì)請(qǐng)求的發(fā)送者和接收者進(jìn)行解耦。這種類(lèi)型的設(shè)計(jì)模式屬于行為型模式。 在這種模式中,通常每個(gè)接收者都包含對(duì)另一個(gè)接收者的引用。如果一個(gè)對(duì)象不能處

    2024年02月12日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包