1. 程式人生 > >Java描述設計模式(17):調停者模式

Java描述設計模式(17):調停者模式

本文原始碼:GitHub·點這裡 || GitEE·點這裡

一、生活場景

1、場景描述

在公司的日常安排中,通常劃分多個部門,每個部門又會分為不同的小組,部門經理的一項核心工作就是協調部門小組之間的工作,例如開發小組,產品小組,小組的需求統一彙總到經理,經理統一安排和協調。

2、場景圖解

3、程式碼實現

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,"需要產品文件",employeeB);
    }
}
/**
 * 部門協調介面
 */
interface Department {
    void coordinate (String userName,String msg,Employee employee) ;
}
/**
 * 部門經理
 */
class Manager implements Department {
    @Override
    public void coordinate (String userName,String msg,Employee employee) {
        System.out.println("經理接收【"+userName+"】的協調任務:" + msg);
        System.out.println("經理轉發【"+userName+"】協調任務,@【"+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+"】協調任務:["+msg+"]");
    }
    public void sendMsg (String name,String msg,Employee employee){
        System.out.println("【"+name+"】發起協調任務:"+ 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);
    }
}

執行結果

【張三】發起協調任務:需要產品文件
經理接收【張三】的協調任務:需要產品文件
經理轉發【張三】協調任務,@【李四】
【李四】收到【張三】協調任務:[需要產品文件]

二、調停者模式

1、基本概念

調停者模式是物件的行為模式。調停者模式包裝了一系列物件相互作用的方式,使得這些物件不必相互顯式引用,通過一箇中介物件進行引用通知,從而物件之間解耦。當這些物件中的某些物件之間的相互作用發生改變時,不會立即影響到其他的物件間的相互作用。保證這些相互作用可以彼此獨立地變化。

2、模式圖解

3、核心角色

  • 抽象調停者角色

定義出同事物件到調停者物件的介面,其中主要方法是一個或多個事件方法。

  • 具體調停者角色

實現了抽象調停者所宣告的事件方法。具體調停者持有所有的具體同事類,並負責協調各具體同事物件的互動資訊。

  • 抽象同事類角色

定義出調停者到同事物件的介面。同事物件只持有調停者而不知道具體的同事物件。

  • 具體同事類角色

所有的具體同事類均從抽象同事類繼承而來,需要與其他同事通訊的時候,就與持有的調停者通訊,調停者會負責與其他的同事物件互動。

4、原始碼實現

/**
 * 抽象調停者類
 */
interface Mediator {
    void notify (Colleague colleague);
}
/**
 * 抽象同事類
 */
abstract class Colleague {
    /* 持有調停者物件 */
    private Mediator mediator;
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }
    public Mediator getMediator(){
        return mediator;
    }
}
/**
 * 具體調停者類
 */
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("協調通知訊息");
    }
}
/**
 * 具體同事類
 */
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);
    }
}

三、調停者模式總結

  • 鬆散耦合

調停者模式通過把多個同事物件之間的互動封裝到調停者物件裡面,從而使得同事物件之間鬆散耦合。

  • 集中管理互動

多個同事物件的互動,被封裝在調停者物件裡面集中管理,使得這些互動行為發生變化的時候,只需要修改調停者物件就可以了。

  • 簡化物件間關係

沒有使用調停者模式的時候,同事物件之間的關係通常是多對多的,引入調停者物件以後,調停者物件和同事物件的關係通常變成雙向的一對多。

  • 模式的缺點

調停者模式的一個潛在缺點是,過度集中化,當同事物件很多,互動非常、複雜時,會導致調停者物件變得十分複雜,而且難於管理和維護。

四、原始碼地址

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

相關推薦

Java描述設計模式(17)調停模式

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、生活場景 1、場景描述 在公司的日常安排中,通常劃分多個部門,每個部門又會分為不同的小組,部門經理的一項核心工作就是協調部門小組之間的工作,例如開發小組,產品小組,小組的需求統一彙總到經理,經理統一安排和協調。 2、場景圖解 3、程式碼實

Java描述設計模式(11)觀察模式

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、觀察者模式 1、概念描述 觀察者模式是物件的行為模式,又叫釋出

Java設計模式11觀察模式

一、什麼是觀察者模式 在閻巨集博士的《JAVA與模式》一書中開頭是這樣描述觀察者(Observer)模式的:   觀察者模式是物件的行為模式,又叫釋出-訂閱(Publish/Subscribe)模式、模型-檢視(Model/View)模式、源-監聽器(Source/Listener)模式

Java設計模式4建造模式

一、什麼是建造者模式? 1、定義: 是將一個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立複合物件,所謂複合物件就是指某個類具有不同的屬性,其實建造者模式就

java常用設計模式建造模式

規則 擴展 cto 抽象 具體類 代碼量 特定 clas class 1、定義 是一種對象構建的設計模式,它可以將復雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的對象。 產品類:一般是一個較為復雜的對象,也就是說創建對象的過

Java設計模式觀察模式(Observer)

觀察者模式定義了物件間的一種一對多依賴關係,使得每當一個物件改變狀態,則所有依賴於它的物件都會得到通知並被自動更新。 它將觀察者和被觀察者的物件分離開。提高了應用程式的可維護性和重用性。 實現觀察者模式有很多形式,一種是“註冊---通知---撤銷註冊”的形式。 觀察者Observer:所有潛在的觀察

Java設計模式14建造模式

什麼是建造者模式 發現很多框架的原始碼使用了建造者模式,看了一下覺得挺實用的,就寫篇文章學習一下,順便分享給大家。 建造者模式是什麼呢?用一句話概括就是建造者模式的目的是為了分離物件的屬性與建立過程,是的,只要記住並理解紅字的幾個部分,建造者模式你就懂了。   為什麼需要建造者模式 建造者

設計模式模式PK觀察模式VS責任鏈模式

ipa 隨機 保留 聲明 pri 測試 void c_str window 1、概述 為什麽要把觀察者模式和責任鏈模式放在一起對比呢?看起來這兩個模式沒有太多的相似性,真沒有嗎?回答是有。我們在觀察者模式中也提到了觸發鏈(也叫做觀察者鏈)的問題,一個具體的角色既可以是觀察者

php設計模式裝飾模式

decorator tac coff cti cor ring 咖啡 parent namespace Beverage.php <?php namespace DesignPattern; abstract class Beverage { /**

設計模式12裝飾模式

裝飾者模式 裝飾器模式是一種用於代替繼承的技術,無需通過繼承增加子類就能擴充套件物件的新功能。使用物件的關聯關係代替繼承關係,更加靈活,同時避免型別體系的快速膨脹。 怎麼說?老樣子,先設想個場景 假如我要去樓下買手抓餅吃,一般來說,手抓餅都會提供不同的配料,比如加雞蛋,加雞柳,加肉鬆或者

大話設計模式建造模式

一.模式定義 物件建立型模式。實現複雜物件的構建與表示分離,使得同樣的構建過程可以建立不同的表示。 建造者模式是一步一步建立一個複雜的物件,它允許使用者只通過指定複雜物件的型別和內容就可以構建它們,使用者不需要知道內部的具體構建細節。 Builder Pattern: Se

JAVA模式》之調停模式

  調停者模式是物件的行為模式。調停者模式包裝了一系列物件相互作用的方式,使得這些物件不必相互明顯引用。從而使它們可以較鬆散地耦合。當這些物件中的某些物件之間的相互作用發生改變時,不會立即影響到其他的一些物件之間的相互作用。從而保證這些相互作用可以彼此獨立地變化。 為什

設計模式系列中介模式

引入 1.案例: 假設計算機1,2,3,4之間要相互通訊。 2.面向實現程式設計方案: 類Computer1中要儲存類Computer2、類Computer3和類Computer4例項,才能呼叫Computer2、Computer3、Comput

《Head First 設計模式觀察模式

# 正文 ## 一、定義 觀察者模式定義了物件之間的一對多依賴,這樣一來,當一個物件改變狀態時,它的所有依賴者都會收到通知並自動更新。 **要點:** * 觀察者模式定義了物件之間一對多的關係。 * 觀察者模式讓主題(可觀察者)和觀察者之間鬆耦合。 * 主題物件管理某些資料,當主題內的資料改變時,會

模式實踐觀察模式與Spring

    公司的專案告一段落,最近在進行RUP培訓專案,有了些空閒的時間。閒暇瀏覽TheServerSide時,看到一篇名叫《Spring loaded Observer Pattern》的文章,不禁會心一笑——我已在兩個月前應用到專案中了。而作者的觀點也和我的觀點吻合:t

Java設計模式補充回調模式、事件監聽器模式、觀察模式(轉)

應該 hand 關閉 lan china 關註 update 使用 event 一、回調函數 為什麽首先會講回調函數呢?因為這個是理解監聽器、觀察者模式的關鍵。 什麽是回調函數 所謂的回調,用於回調的函數。 回調函數只是一個功能片段,由用戶按照回調函數調用約定來實現的

Java設計模式學習筆記,三建造模式

() stat sys pri builder 統一 return tengine str 建造者模式:實現了構建和裝配的解耦,即對象的各個子組件單獨構建,再進行裝配,從而建造完整對象。 該模式適用於構建較為復雜的對象(多個子組件)。 不同的構建者,使用相同的裝配者,可以建

Java 設計模式調停模式

out pac pub house string void imp www over http://www.verejava.com/?id=16999137231072 package com.mediator.theory; public class TestMedi

Java中的設計模式(七)觀察模式

name int 還要 The else 意圖 http exceptio 所有 介紹 觀察者模式是行為設計模式之一。當您對對象的狀態感興趣並希望在有任何更改時收到通知時,觀察者設計模式非常有用。在觀察者模式中,監視另一個對象狀態的對象稱為Observer,正在被監視的對象

Java中的設計模式(八)建造模式

伸縮 null clas 示例代碼 最簡 裝配 角色扮演 app 但是 介紹 今天我們將研究java中的Builder模式。Builder 設計模式是一種創造性的設計模式,如工廠模式和抽象工廠模式。 當Object包含許多屬性時,引入了Builder模式來解決Factory