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

面試設(shè)計模式-責(zé)任鏈模式

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

一 責(zé)任鏈模式

1.1 概述

在進(jìn)行請假申請,財務(wù)報銷申請,需要走部門領(lǐng)導(dǎo)審批,技術(shù)總監(jiān)審批,大領(lǐng)導(dǎo)審批等判斷環(huán)節(jié)。存在請求方和接收方耦合性太強,代碼會比較臃腫,不利于擴展和維護(hù)。

1.2 責(zé)任鏈模式

針對上面,使用責(zé)任鏈模式,將請求方和接收方的業(yè)務(wù)進(jìn)行解耦,客戶端發(fā)送一個請求,由一個抽象的處理請求的類?Handler?來接受這個請求,而具體怎么處理請求,就由?Handler?的子類來完成處理請求方法的實現(xiàn),每個子類滿足條件則自己處理,不滿足調(diào)用下一個處理子類進(jìn)行處理,以此類推,形成一條處理的鏈條。

1.3 代碼實現(xiàn)

1.采購請求類

package com.ljf.day0905;

/**
 * @ClassName: ClientRequest
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05?21:55:41?
 * @Version: V1.0
 **/
public class ClientRequest {
        /* 請求類型 */
        private int type = 0;
        /* 請求金額 */
        private float price = 0.0f;
        /* 請求編號 */
        private int id = 0;
        /**
         * 全參構(gòu)造
         *
         * @param type
         * @param price
         * @param id
         */
        public ClientRequest(int type, float price, int id) {
            this.type = type;
            this.price = price;
            this.id = id;
        }
        public int getType() {
            return type;
        }
        public float getPrice() {
            return price;
        }
        public int getId() {
            return id;
        }

}

2.審批抽象類

package com.ljf.day0905;

/**
 * @ClassName: Approver
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05?21:56:49?
 * @Version: V1.0
 **/
public abstract class Approver {
        /* 審批人姓名 */
        protected String name;
        /* 下一個審批人 */
        protected Approver approver;
        /**
         * 創(chuàng)建審批人要指定姓名
         *
         * @param name
         */
        public Approver(String name) {
            this.name = name;
        }
        /**
         * 指定下一個審批人
         *
         * @param approver
         */
        public void setApprover(Approver approver) {
            this.approver = approver;
        }
        /**
         * 抽象的審批方法
         *
         * @param purchaseRequest
         */
        public abstract void approve(ClientRequest purchaseRequest);

}

3.子類來繼承抽象審批類

3.1?DeaprtLeader

package com.ljf.day0905;

/**
 * @ClassName: DeaprtLeader
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05?21:58:10?
 * @Version: V1.0
 **/
public class DeaprtLeader extends Approver {
        /**
         * 創(chuàng)建審批人要指定姓名
         *
         * @param name
         */
        public DeaprtLeader(String name) {
            super(name);
        }
        /**
         * 教學(xué)主任審批邏輯
         *
         * @param purchaseRequest
         */
        public void approve(ClientRequest purchaseRequest) {
            if (purchaseRequest.getPrice() <= 5000) {
                System.out.println("請求編號:" + purchaseRequest.getId() + "被" +
                        this.name + "處理");
            } else {
                approver.approve(purchaseRequest);
            }
        }

}

2.BossLeader

package com.ljf.day0905;

/**
 * @ClassName: BossLeader
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05?21:59:23?
 * @Version: V1.0
 **/
public class BossLeader extends Approver{
        /**
         * 創(chuàng)建審批人要指定姓名
         *
         * @param name
         */
        public BossLeader(String name) {
            super(name);
        }
        /**
         * 院長審批邏輯
         *
         * @param purchaseRequest
         */
        public void approve(ClientRequest purchaseRequest) {
            if (purchaseRequest.getPrice() > 5000 && purchaseRequest.getPrice() <=
                    10000) {
                System.out.println("請求編號:" + purchaseRequest.getId() + "被" +
                        this.name + "處理");
            } else {
                approver.approve(purchaseRequest);
            }
        }

}

3.VicePrincipal

package com.ljf.day0905;

import com.sun.security.ntlm.Client;

/**
 * @ClassName: VicePrincipal
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05?22:09:25?
 * @Version: V1.0
 **/

    public class VicePrincipal extends Approver {
        /**
         * 創(chuàng)建審批人要指定姓名
         *
         * @param name
         */
        public VicePrincipal(String name) {
            super(name);
        }
        /**
         * 副校長審批邏輯
         *
         * @param purchaseRequest
         */
        public void approve(ClientRequest purchaseRequest) {
            if (purchaseRequest.getPrice() > 10000 ) {
                System.out.println("請求編號:" + purchaseRequest.getId() + "被" +
                        this.name + "處理");
            } else {
                approver.approve(purchaseRequest);
            }
        }
    }

4.測試

package com.ljf.day0905;

/**
 * @ClassName: TestZe
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/05?22:00:19?
 * @Version: V1.0
 **/
public class TestZe {
    public static void main(String[] args) {

// 創(chuàng)建采購請求
        ClientRequest purchaseRequest = new ClientRequest(1, 33310000, 1);
// 創(chuàng)建審批人
        Approver departmentApprover = new DeaprtLeader("團(tuán)主任");
        Approver dean = new BossLeader("方院長");
        Approver vicePrincipal = new VicePrincipal("磊副校長");

       // Approver principal = new Principal("喜校長");
// 設(shè)置下一個審批人
        departmentApprover.setApprover(dean);
// 這里要形成一個環(huán)鏈,避免如果 30000 金額以下的請求
// 直接交給校長處理,會出現(xiàn)空指針
// 當(dāng)然,如果程序規(guī)定只能從主任開始處理
// 一層一層最后到校長處理,形成一個單鏈,這里就不用了設(shè)置了
       dean.setApprover(vicePrincipal);
        vicePrincipal.setApprover(departmentApprover);
       // principal.setApprover(departmentApprover);
// 測試:入口
        departmentApprover.approve(purchaseRequest);
    }
}

5.結(jié)果

面試設(shè)計模式-責(zé)任鏈模式,設(shè)計模式,面試,設(shè)計模式,責(zé)任鏈模式

責(zé)任鏈模式(Chain of Responsibility Pattern)_Myovlmx的博客-CSDN博客?文章來源地址http://www.zghlxwxcb.cn/news/detail-703262.html

到了這里,關(guān)于面試設(shè)計模式-責(zé)任鏈模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 設(shè)計模式:責(zé)任鏈模式

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

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

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

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

    2024年02月12日
    瀏覽(20)
  • 設(shè)計模式-責(zé)任鏈模式

    遇到一個面試的場景題目,讓實現(xiàn)稅率的計算 請使用Java語言實現(xiàn)如下稅率計算: 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)雅 ⅱ. 可擴展性,考慮區(qū)間的變化,比如說起征點從5000變成10000等等,或者

    2024年02月11日
    瀏覽(23)
  • 重溫設(shè)計模式 --- 責(zé)任鏈模式

    責(zé)任鏈模式 是一種行為型設(shè)計模式,它通過一條由多個處理器組成的鏈來處理請求,每個處理器都有機會處理請求,如果一個處理器不能處理該請求,它會將請求傳遞給下一個處理器,直到請求被處理為止。 在實際應(yīng)用中,責(zé)任鏈模式常用于處理請求的分發(fā)、事件處理等場

    2024年02月13日
    瀏覽(21)
  • 說說設(shè)計模式~責(zé)任鏈模式

    說說設(shè)計模式~責(zé)任鏈模式

    回到目錄 它是一種設(shè)計模塊,主要將操作流程與具體操作解耦,讓每個操作都可以設(shè)置自己的操作流程,這對于工作流應(yīng)用是一個不錯的選擇! 下面是官方標(biāo)準(zhǔn)的定義:責(zé)任鏈模式是一種設(shè)計模式。在責(zé)任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一

    2024年02月11日
    瀏覽(21)
  • 設(shè)計模式——22. 責(zé)任鏈模式

    責(zé)任鏈模式是一種行為設(shè)計模式,它允許你創(chuàng)建一個對象鏈,每個對象都包含了請求的一部分處理邏輯,并且請求按照鏈的順序依次傳遞,直到有一個對象處理它為止。責(zé)任鏈模式通常用于將一個請求從發(fā)送者傳遞給多個接收者,直到有一個接收者處理請求為止。 責(zé)任鏈模式

    2024年02月07日
    瀏覽(19)
  • 設(shè)計模式07-責(zé)任鏈模式

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

    責(zé)任鏈模式屬于行為設(shè)計模式,常見的過濾器鏈就是使用責(zé)任鏈模式設(shè)計的。 Q:假設(shè)有一個闖關(guān)游戲,共三關(guān),每一關(guān)達(dá)到通過條件后才能進(jìn)入下一關(guān),使用java實現(xiàn)。 A:針對這個問題,按照樸素的想法,我們可以定義三個類,分別是第一關(guān)、第二關(guān)、第三關(guān),客戶端啟動

    2024年02月16日
    瀏覽(16)
  • 設(shè)計模式之責(zé)任鏈模式

    設(shè)計模式之責(zé)任鏈模式

    責(zé)任鏈設(shè)計模式是一種行為設(shè)計模式,它允許你創(chuàng)建一個對象鏈。請求從鏈的一端進(jìn)入,并沿著鏈的路徑依次經(jīng)過各個對象,直至找到合適的處理者。每個對象都決定是否要處理該請求或?qū)⑵鋫鬟f給鏈中的下一個對象。 1.1 核心概念 Handler(處理者):每個處理者對象包含了處

    2024年02月05日
    瀏覽(19)
  • 設(shè)計模式詳解-責(zé)任鏈模式

    類型:行為型模式 實現(xiàn)原理:為請求創(chuàng)建了一個接收者對象的鏈。對請求的發(fā)送者和接收者進(jìn)行解耦,每個接收者都包含對另一個接收者的引用,如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。 作用:避免請求發(fā)送者與接收者耦合在一

    2024年02月12日
    瀏覽(13)
  • Java設(shè)計模式-責(zé)任鏈模式

    責(zé)任鏈模式,有的地方也會叫職責(zé)鏈模式。它指的是,為請求者和被請求者之間創(chuàng)建一條對象處理鏈路,避免請求發(fā)送者與接受者耦合在一起。 在責(zé)任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定

    2024年02月15日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包