真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java描述設(shè)計(jì)模式(17):調(diào)停者模式

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

因?yàn)榕驼嬲\(chéng),有更多的客戶和我們聚集在一起,為了共同目標(biāo),成都創(chuàng)新互聯(lián)在工作上密切配合,從創(chuàng)業(yè)型企業(yè)到如今不斷成長(zhǎng),要感謝客戶對(duì)我們的高要求,讓我們敢于面對(duì)挑戰(zhàn),才有今天的進(jìn)步與發(fā)展。從網(wǎng)站到小程序開發(fā),軟件開發(fā),重慶App定制開發(fā),十載企業(yè)網(wǎng)站建設(shè)服務(wù)經(jīng)驗(yàn),為企業(yè)提供網(wǎng)站設(shè)計(jì),網(wǎng)站改版維護(hù)一條龍服務(wù).為企業(yè)提供成都全網(wǎng)營(yíng)銷,定制開發(fā),原創(chuàng)設(shè)計(jì),十載品質(zhì),值得您的信賴.

一、生活場(chǎng)景

1、場(chǎng)景描述

在公司的日常安排中,通常劃分多個(gè)部門,每個(gè)部門又會(huì)分為不同的小組,部門經(jīng)理的一項(xiàng)核心工作就是協(xié)調(diào)部門小組之間的工作,例如開發(fā)小組,產(chǎn)品小組,小組的需求統(tǒng)一匯總到經(jīng)理,經(jīng)理統(tǒng)一安排和協(xié)調(diào)。

2、場(chǎng)景圖解

Java描述設(shè)計(jì)模式(17):調(diào)停者模式

3、代碼實(shí)現(xiàn)

public class C01_InScene {
    public static void main(String[] args) {
        Manager manager = new Manager() ;
        EmployeeA employeeA = new EmployeeA("張三",manager) ;
        EmployeeB employeeB = new EmployeeB("李四",manager) ;
        employeeA.sendMsg(employeeA.name,"需要產(chǎn)品文檔",employeeB);
    }
}
/**
 * 部門協(xié)調(diào)接口
 */
interface Department {
    void coordinate (String userName,String msg,Employee employee) ;
}
/**
 * 部門經(jīng)理
 */
class Manager implements Department {
    @Override
    public void coordinate (String userName,String msg,Employee employee) {
        System.out.println("經(jīng)理接收【"+userName+"】的協(xié)調(diào)任務(wù):" + msg);
        System.out.println("經(jīng)理轉(zhuǎn)發(fā)【"+userName+"】協(xié)調(diào)任務(wù),@【"+employee.name+"】");
        employee.getMsg(userName,msg);
    }
}
/**
 * 員工抽象類
 */
abstract class Employee {
    public String name ;
    private Department department ;
    public Employee (String name,Department department){
        this.name = name ;
        this.department = department ;
    }
    public void getMsg (String userName,String msg){
        System.out.println("【"+this.name+"】收到"+"【"+userName+"】協(xié)調(diào)任務(wù):["+msg+"]");
    }
    public void sendMsg (String name,String msg,Employee employee){
        System.out.println("【"+name+"】發(fā)起協(xié)調(diào)任務(wù):"+ msg);
        department.coordinate(name,msg,employee);
    }
}
/**
 * 具體員工
 */
class EmployeeA extends Employee {
    public EmployeeA(String name, Department department) {
        super(name, department);
    }
}
class EmployeeB extends Employee {
    public EmployeeB(String name, Department department) {
        super(name, department);
    }
}

執(zhí)行結(jié)果

【張三】發(fā)起協(xié)調(diào)任務(wù):需要產(chǎn)品文檔
經(jīng)理接收【張三】的協(xié)調(diào)任務(wù):需要產(chǎn)品文檔
經(jīng)理轉(zhuǎn)發(fā)【張三】協(xié)調(diào)任務(wù),@【李四】
【李四】收到【張三】協(xié)調(diào)任務(wù):[需要產(chǎn)品文檔]

二、調(diào)停者模式

1、基本概念

調(diào)停者模式是對(duì)象的行為模式。調(diào)停者模式包裝了一系列對(duì)象相互作用的方式,使得這些對(duì)象不必相互顯式引用,通過(guò)一個(gè)中介對(duì)象進(jìn)行引用通知,從而對(duì)象之間解耦。當(dāng)這些對(duì)象中的某些對(duì)象之間的相互作用發(fā)生改變時(shí),不會(huì)立即影響到其他的對(duì)象間的相互作用。保證這些相互作用可以彼此獨(dú)立地變化。

2、模式圖解

Java描述設(shè)計(jì)模式(17):調(diào)停者模式

3、核心角色

  • 抽象調(diào)停者角色

定義出同事對(duì)象到調(diào)停者對(duì)象的接口,其中主要方法是一個(gè)或多個(gè)事件方法。

  • 具體調(diào)停者角色

實(shí)現(xiàn)了抽象調(diào)停者所聲明的事件方法。具體調(diào)停者持有所有的具體同事類,并負(fù)責(zé)協(xié)調(diào)各具體同事對(duì)象的交互信息。

  • 抽象同事類角色

定義出調(diào)停者到同事對(duì)象的接口。同事對(duì)象只持有調(diào)停者而不知道具體的同事對(duì)象。

  • 具體同事類角色

所有的具體同事類均從抽象同事類繼承而來(lái),需要與其他同事通信的時(shí)候,就與持有的調(diào)停者通信,調(diào)停者會(huì)負(fù)責(zé)與其他的同事對(duì)象交互。

4、源碼實(shí)現(xiàn)

/**
 * 抽象調(diào)停者類
 */
interface Mediator {
    void notify (Colleague colleague);
}
/**
 * 抽象同事類
 */
abstract class Colleague {
    /* 持有調(diào)停者對(duì)象 */
    private Mediator mediator;
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }
    public Mediator getMediator(){
        return mediator;
    }
}
/**
 * 具體調(diào)停者類
 */
class ConcreteMediator implements Mediator{
    private ConcreteColleagueA colleagueA ;
    private ConcreteColleagueB colleagueB ;
    public void setColleagueA(ConcreteColleagueA colleagueA) {
        this.colleagueA = colleagueA;
    }
    public void setColleagueB(ConcreteColleagueB colleagueB) {
        this.colleagueB = colleagueB;
    }
    @Override
    public void notify(Colleague colleague) {
        System.out.println("協(xié)調(diào)通知消息");
    }
}
/**
 * 具體同事類
 */
class ConcreteColleagueA extends Colleague{
    public ConcreteColleagueA(Mediator mediator) {
        super(mediator);
    }
    public void operate(){
        getMediator().notify(this);
    }
}
class ConcreteColleagueB extends Colleague{
    public ConcreteColleagueB(Mediator mediator) {
        super(mediator);
    }
    public void operation(){
        getMediator().notify(this);
    }
}

三、調(diào)停者模式總結(jié)

  • 松散耦合

調(diào)停者模式通過(guò)把多個(gè)同事對(duì)象之間的交互封裝到調(diào)停者對(duì)象里面,從而使得同事對(duì)象之間松散耦合。

  • 集中管理交互

多個(gè)同事對(duì)象的交互,被封裝在調(diào)停者對(duì)象里面集中管理,使得這些交互行為發(fā)生變化的時(shí)候,只需要修改調(diào)停者對(duì)象就可以了。

  • 簡(jiǎn)化對(duì)象間關(guān)系

沒(méi)有使用調(diào)停者模式的時(shí)候,同事對(duì)象之間的關(guān)系通常是多對(duì)多的,引入調(diào)停者對(duì)象以后,調(diào)停者對(duì)象和同事對(duì)象的關(guān)系通常變成雙向的一對(duì)多。

  • 模式的缺點(diǎn)

調(diào)停者模式的一個(gè)潛在缺點(diǎn)是,過(guò)度集中化,當(dāng)同事對(duì)象很多,交互非常、復(fù)雜時(shí),會(huì)導(dǎo)致調(diào)停者對(duì)象變得十分復(fù)雜,而且難于管理和維護(hù)。

四、源代碼地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

Java描述設(shè)計(jì)模式(17):調(diào)停者模式


網(wǎng)頁(yè)名稱:Java描述設(shè)計(jì)模式(17):調(diào)停者模式
新聞來(lái)源:http://weahome.cn/article/pojsds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部