亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

行為型模式:責任鏈模式

發布時間:2020-07-12 18:37:38 來源:網絡 閱讀:211 作者:LieBrother 欄目:軟件技術

文章首發
行為型模式:責任鏈模式

行為型模式:責任鏈模式

十一大行為型模式之四:責任鏈模式。

簡介

姓名 :責任鏈模式

英文名 :Chain of Responsibility Pattern

價值觀 :責任歸我

個人介紹
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.
使多個對象都有機會處理請求,從而避免了請求的發送者和接受者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有對象處理它為止。
(來自《設計模式之禪》)

你要的故事

快要金三銀四了,很多同學蠢蠢欲動想要去外面看看世界,而大家有沒有提前了解各大企業的面試流程呢?這里我就給大家科普一下大多數互聯網企業的面試流程,正好責任鏈模式用得上。

在互聯網企業中,程序員這個崗位的招聘流程大同小異,而一般至少都會有 3 輪面試,分別是 2 輪技術面和 1 輪 HR 面。而這幾輪面試都是層層遞進的,最開始面試一般是組長面試,通過之后就是部門領導面試,再通過之后就是 HR 面試,HR 面試通過之后就可以成功拿到 Offer 了。

故事從小明參加某公司的面試開始,某公司的招聘流程就是上面說的 3 輪面試。招聘流程的面試官分別是:第一面是組長老剛,第二面是部門經理老孫,第三面也就是終面是 HR 老劉。為什么說這個場景符合責任鏈模式呢?首先不管是組長還是部門經理還是 HR,他們都作為面試官,面試官賦予他們的權利是去面試來公司面試的同學,而面試的結果是可傳遞性的,也就是如果面試通過,就會到下一輪面試,最終成為一條傳遞鏈。我們用代碼模擬這個過程。

public class ChainOfResponsibilityTest {

    public static void main(String[] args) {
        Interviewee interviewee = new Interviewee("小明");
        TeamLeader teamLeader = new TeamLeader("老剛");
        DepartMentManager departMentManager = new DepartMentManager("老孫");
        HR hr = new HR("老劉");
        // 設置面試流程
        teamLeader.setNextInterviewer(departMentManager);
        departMentManager.setNextInterviewer(hr);
        // 開始面試
        teamLeader.handleInterview(interviewee);
    }

}

/**
 * 面試者
 */
class Interviewee {

    private String name;

    private boolean teamLeaderOpinion;
    private boolean departMentManagerOpinion;
    private boolean hrOpinion;

    public Interviewee(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isTeamLeaderOpinion() {
        return teamLeaderOpinion;
    }

    public void setTeamLeaderOpinion(boolean teamLeaderOpinion) {
        this.teamLeaderOpinion = teamLeaderOpinion;
    }

    public boolean isDepartMentManagerOpinion() {
        return departMentManagerOpinion;
    }

    public void setDepartMentManagerOpinion(boolean departMentManagerOpinion) {
        this.departMentManagerOpinion = departMentManagerOpinion;
    }

    public boolean isHrOpinion() {
        return hrOpinion;
    }

    public void setHrOpinion(boolean hrOpinion) {
        this.hrOpinion = hrOpinion;
    }
}

/**
 * 面試官
 */
abstract class Interviewer {

    protected String name;
    protected Interviewer nextInterviewer;

    public Interviewer(String name) {
        this.name = name;
    }

    public Interviewer setNextInterviewer(Interviewer nextInterviewer) {
        this.nextInterviewer = nextInterviewer;
        return this.nextInterviewer;
    }

    public abstract void handleInterview(Interviewee interviewee);

}

/**
 * 組長
 */
class TeamLeader extends Interviewer {

    public TeamLeader(String name) {
        super(name);
    }

    @Override
    public void handleInterview(Interviewee interviewee) {
        System.out.println("組長[" + this.name + "]面試[" + interviewee.getName() + "]同學");
        interviewee.setTeamLeaderOpinion(new Random().nextBoolean());
        if (interviewee.isTeamLeaderOpinion()) {
            System.out.println("[" + interviewee.getName() + "]同學組長輪面試通過");
            this.nextInterviewer.handleInterview(interviewee);
        } else {
            System.out.println("[" + interviewee.getName() + "]同學組長輪面試不通過");
        }
    }
}

/**
 * 部門經理
 */
class DepartMentManager extends Interviewer {

    public DepartMentManager(String name) {
        super(name);
    }

    @Override
    public void handleInterview(Interviewee interviewee) {
        System.out.println("部門經理[" + this.name + "]面試[" + interviewee.getName() + "]同學");
        interviewee.setDepartMentManagerOpinion(new Random().nextBoolean());
        if (interviewee.isDepartMentManagerOpinion()) {
            System.out.println("[" + interviewee.getName() + "]同學部門經理輪面試通過");
            this.nextInterviewer.handleInterview(interviewee);
        } else {
            System.out.println("[" + interviewee.getName() + "]同學部門經理輪面試不通過");
        }
    }
}

/**
 * HR
 */
class HR extends Interviewer {

    public HR(String name) {
        super(name);
    }

    @Override
    public void handleInterview(Interviewee interviewee) {
        System.out.println("HR[" + this.name + "]面試[" + interviewee.getName() + "]同學");
        interviewee.setHrOpinion(new Random().nextBoolean());
        if (interviewee.isHrOpinion()) {
            System.out.println("[" + interviewee.getName() + "]同學HR輪面試通過, 恭喜拿到 Offer");
        } else {
            System.out.println("[" + interviewee.getName() + "]同學HR輪面試不通過");
        }
    }
}

打印結果:
組長[老剛]面試[小明]同學
[小明]同學組長輪面試通過
部門經理[老孫]面試[小明]同學
[小明]同學部門經理輪面試通過
HR[老劉]面試[小明]同學
[小明]同學HR輪面試通過, 恭喜拿到 Offer

上面代碼打印結果是小明通過層層篩選,通過了面試,拿到了 Offer。下面的圖來展現這次面試的流程。

行為型模式:責任鏈模式

講解一下代碼,Interviewee 是面試者,對于企業來說這個面試者來面試的過程會有 3 個關鍵標識,就是 3 位面試官對這位面試者的評價,只有都評價好才能通過面試拿到 Offer,所以 Interviewee 類有 3 位面試官的面試結果。Interviewer 是面時官,企業中面試官不是一個職位,而是一個工作,幫企業招到合適的人才,所以它是一個抽象類,有一個抽象方法就是去面試應聘者,具體面試過程又各面試官實現,而因為這個面試會有結果反饋,結果好的會進入下一輪面試,所以會有下一個面試官的對象引用,責任鏈模式也就在這里體現。TeamLeader、DepartMentManager、HR 則為公司的不同職位,而這些職位當公司需要招聘時,都需要去充當面試官,所以都繼承了 Interviewer。這整個過程就構成了責任鏈模式代碼示例,希望在金三銀四各位蠢蠢欲動的朋友們都能闖到最后一關拿下 HR 姐姐。

代碼:
Chain of Responsibility Pattern

總結

責任鏈模式很好的把處理的邏輯封裝起來,在代碼中,我們看到的只是組長面試,但是其實背后隱藏著部門經理和HR的面試。責任鏈是不是看起來很熟悉?在開發 Java Web 項目的時候是不是有用到過?Filter 過濾器里面就是用責任鏈模式來實現的。上面代碼還用到了另一個模式,不明確指出來了,考驗大家學習這些設計模式的效果,知道的同學可以留言說一下。

推薦閱讀

創建型模式:單例模式(小明就只有 1 輛車)
創建型模式:工廠方法(小明家的車庫)
創建型模式:抽象工廠(寶馬車就得用寶馬輪胎和寶馬方向盤)
創建型模式:建造者模式(湯這么煲)
創建型模式:原型模式(復印書籍)
行為型模式:模板方法(運動鞋制造過程)
行為型模式:中介者模式(租房找中介)
行為型模式:命令模式(技術經理分配任務)

公眾號后臺回復『大禮包』獲取 Java、Python、IOS 等教程
加個人微信備注『教程』獲取架構師、機器學習等教程

行為型模式:責任鏈模式

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沁水县| 邛崃市| 和顺县| 乌鲁木齐市| 宜州市| 逊克县| 梁河县| 桦川县| 祥云县| 清水河县| 北辰区| 舞阳县| 勃利县| 黄石市| 廉江市| 大方县| 石棉县| 普宁市| 民权县| 长岛县| 洪泽县| 莱阳市| 山东省| 阿拉善右旗| 全南县| 巨鹿县| 防城港市| 莒南县| 新巴尔虎右旗| 寿阳县| 东兰县| 敦化市| 安泽县| 无棣县| 云南省| 和田市| 衢州市| 上高县| 咸宁市| 伊川县| 清新县|