成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

行為型模式:責(zé)任鏈模式

文章首發(fā)
行為型模式:責(zé)任鏈模式

成都創(chuàng)新互聯(lián),為您提供重慶網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營(yíng)銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對(duì)服務(wù)成都塑料袋等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!

行為型模式:責(zé)任鏈模式

十一大行為型模式之四:責(zé)任鏈模式。

簡(jiǎn)介

姓名:責(zé)任鏈模式

英文名:Chain of Responsibility Pattern

價(jià)值觀:責(zé)任歸我

個(gè)人介紹
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.
使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免了請(qǐng)求的發(fā)送者和接受者之間的耦合關(guān)系。將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有對(duì)象處理它為止。
(來自《設(shè)計(jì)模式之禪》)

你要的故事

快要金三銀四了,很多同學(xué)蠢蠢欲動(dòng)想要去外面看看世界,而大家有沒有提前了解各大企業(yè)的面試流程呢?這里我就給大家科普一下大多數(shù)互聯(lián)網(wǎng)企業(yè)的面試流程,正好責(zé)任鏈模式用得上。

在互聯(lián)網(wǎng)企業(yè)中,程序員這個(gè)崗位的招聘流程大同小異,而一般至少都會(huì)有 3 輪面試,分別是 2 輪技術(shù)面和 1 輪 HR 面。而這幾輪面試都是層層遞進(jìn)的,最開始面試一般是組長(zhǎng)面試,通過之后就是部門領(lǐng)導(dǎo)面試,再通過之后就是 HR 面試,HR 面試通過之后就可以成功拿到 Offer 了。

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

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("老劉");
        // 設(shè)置面試流程
        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);

}

/**
 * 組長(zhǎng)
 */
class TeamLeader extends Interviewer {

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

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

/**
 * 部門經(jīng)理
 */
class DepartMentManager extends Interviewer {

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

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

/**
 * 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() + "]同學(xué)");
        interviewee.setHrOpinion(new Random().nextBoolean());
        if (interviewee.isHrOpinion()) {
            System.out.println("[" + interviewee.getName() + "]同學(xué)HR輪面試通過, 恭喜拿到 Offer");
        } else {
            System.out.println("[" + interviewee.getName() + "]同學(xué)HR輪面試不通過");
        }
    }
}

打印結(jié)果:
組長(zhǎng)[老剛]面試[小明]同學(xué)
[小明]同學(xué)組長(zhǎng)輪面試通過
部門經(jīng)理[老孫]面試[小明]同學(xué)
[小明]同學(xué)部門經(jīng)理輪面試通過
HR[老劉]面試[小明]同學(xué)
[小明]同學(xué)HR輪面試通過, 恭喜拿到 Offer

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

行為型模式:責(zé)任鏈模式

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

代碼:
Chain of Responsibility Pattern

總結(jié)

責(zé)任鏈模式很好的把處理的邏輯封裝起來,在代碼中,我們看到的只是組長(zhǎng)面試,但是其實(shí)背后隱藏著部門經(jīng)理和HR的面試。責(zé)任鏈?zhǔn)遣皇强雌饋砗苁煜??在開發(fā) Java Web 項(xiàng)目的時(shí)候是不是有用到過?Filter 過濾器里面就是用責(zé)任鏈模式來實(shí)現(xiàn)的。上面代碼還用到了另一個(gè)模式,不明確指出來了,考驗(yàn)大家學(xué)習(xí)這些設(shè)計(jì)模式的效果,知道的同學(xué)可以留言說一下。

推薦閱讀

創(chuàng)建型模式:?jiǎn)卫J剑ㄐ∶骶椭挥?1 輛車)
創(chuàng)建型模式:工廠方法(小明家的車庫(kù))
創(chuàng)建型模式:抽象工廠(寶馬車就得用寶馬輪胎和寶馬方向盤)
創(chuàng)建型模式:建造者模式(湯這么煲)
創(chuàng)建型模式:原型模式(復(fù)印書籍)
行為型模式:模板方法(運(yùn)動(dòng)鞋制造過程)
行為型模式:中介者模式(租房找中介)
行為型模式:命令模式(技術(shù)經(jīng)理分配任務(wù))

公眾號(hào)后臺(tái)回復(fù)『大禮包』獲取 Java、Python、IOS 等教程
加個(gè)人微信備注『教程』獲取架構(gòu)師、機(jī)器學(xué)習(xí)等教程

行為型模式:責(zé)任鏈模式

本文題目:行為型模式:責(zé)任鏈模式
文章地址:http://jinyejixie.com/article48/ppisep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、品牌網(wǎng)站制作、全網(wǎng)營(yíng)銷推廣、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
久治县| 扬中市| 松滋市| 大城县| 康定县| 肃宁县| 图片| 利津县| 房山区| 高雄市| 扎赉特旗| 铅山县| 石台县| 杭锦旗| 芷江| 确山县| 庐江县| 门头沟区| 喀什市| 应城市| 大连市| 两当县| 井冈山市| 呼图壁县| 盈江县| 太原市| 株洲市| 清水县| 原平市| 德清县| 临湘市| 瓮安县| 云龙县| 搜索| 南安市| 麻城市| 大竹县| 左贡县| 西乌| 定结县| 云浮市|