日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

设计模式(十七)中介者

發(fā)布時間:2023/12/24 windows 33 coder
生活随笔 收集整理的這篇文章主要介紹了 设计模式(十七)中介者 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、定義

義一個對象來封裝一系列的對象交互。中介者模式使各對象不需要顯示地相互引用,從而使其耦合松散,而且可以讓你相對獨立地改變它們之間的交互。中介者模式又稱為調(diào)停模式,它是一種對象說行為型模式。

二、描述

在中介者模式中,引入了用于協(xié)調(diào)其他對象/類之間的相互調(diào)用的中介者類,為了讓系統(tǒng)具有更好的靈活性和可擴(kuò)展性,通常還提供了抽象中介者,包含以下四個角色:1、Mediator(抽象中介者):它定義了一個接口,該接口用于與各同事對象之間進(jìn)行通信。
2、ConcreteMediator(具體中介者):它是抽象中介者的子類,通過協(xié)調(diào)各個同事對象來實現(xiàn)協(xié)作行為,維持了各個同事對象的引用。
3、Colleague(抽象同事類):它定義了各個同事類公有的方法,并聲明了一些抽象方法來供子類實現(xiàn),同時維持了一個對抽象中介者類的引用,其子類可以通過該引用來與中介者通信。
4、ConcreteColleague(具體同事類):它是抽象同事類的子類,每一個同事對象需要和其他對象通信時,先與中介者對象通信,通過中介者來間接完成與其他同事類的通信,在具體同事類中實現(xiàn)了在抽象同事類中聲明的抽象方法。

三、例子

X公司欲開發(fā)一套CRM系統(tǒng),其中包含一個客戶信息管理模塊,界面包含了按鈕、文本框、列表框、下拉框等多個組件,增加或刪除一個客戶,各組件均會發(fā)生聯(lián)動效果,較為復(fù)雜。
Mediator:抽象中介者

public abstract class Mediator
{
    public abstract void ComponenetChanged(Component c);
}

ConcreteMediator:具體中介者

public class ConcreteMediator : Mediator
{
    // 維持對各個同事對象的引用
    public Button addButton;
    public List list;
    public TextBox userNameTextBox;
    public ComboBox cb;

    // 封裝同事對象之間的交互
    public override void ComponenetChanged(Component c)
    {
        // 單擊按鈕
        if (c == addButton)
        {
            Console.WriteLine("-- 單擊增加按鈕 --");
            list.Update();
            cb.Update();
            userNameTextBox.Update();
        }
        // 從列表框選擇客戶
        else if (c == list)
        {
            Console.WriteLine("-- 從列表框選擇客戶 --");
            cb.Select();
            userNameTextBox.SetText();
        }
        // 從組合框選擇客戶
        else if (c == cb)
        {
            Console.WriteLine("-- 從組合框選擇客戶 --");
            cb.Select();
            userNameTextBox.SetText();
        }
    }
}

Component:抽象組件,充當(dāng)抽象同事類(Colleague)

public abstract class Component
{
    protected Mediator mediator;

    public void SetMediator(Mediator mediator)
    {
        this.mediator = mediator;
    }

    // 轉(zhuǎn)發(fā)調(diào)用
    public void Changed()
    {
        mediator.ComponenetChanged(this);
    }

    public abstract void Update();
}

Button、List、ComboBox、TextBox:按鈕、列表框、組合框、文本框,具體組件,充當(dāng)具體同事類(ConcreteColleague)

public class Button : Component
{
    public override void Update()
    {
        // 按鈕不產(chǎn)生響應(yīng)
    }
}

public class List : Component
{
    public override void Update()
    {
        Console.WriteLine("列表框增加一項:張無忌");
    }

    public void Select()
    {
        Console.WriteLine("列表框選中項:小龍女");
    }
}

public class ComboBox : Component
{
    public override void Update()
    {
        Console.WriteLine("組合框增加一項:張無忌");
    }

    public void Select()
    {
        Console.WriteLine("組合框選中項:小龍女");
    }
}

public class TextBox : Component
{
    public override void Update()
    {
        Console.WriteLine("客戶信息增加成功后文本框清空");
    }

    public void SetText()
    {
        Console.WriteLine("文本框顯示:小龍女");
    }
}

Program:客戶端測試類

// Step1.定義中介者對象
ConcreteMediator mediator = new ConcreteMediator();

// Step2.定義同事對象
Button addButton = new Button();
List list = new List();
ComboBox cb = new ComboBox();
TextBox userNameTextBox = new TextBox();

addButton.SetMediator(mediator);
list.SetMediator(mediator);
cb.SetMediator(mediator);
userNameTextBox.SetMediator(mediator);

mediator.addButton = addButton;
mediator.list = list;
mediator.cb = cb;
mediator.userNameTextBox = userNameTextBox;

// Step3.點擊增加按鈕
addButton.Changed();

Console.WriteLine("---------------------------------------------");

// Step4.從列表框選擇客戶
list.Changed();
Console.ReadLine();

四、總結(jié)

1、優(yōu)點

(1)中介者模式簡化了對象之間的交互,它用中介者和同事的一對多交互代替了原來同事之間的多對多交互,一對多關(guān)系更容易理解、維護(hù)和擴(kuò)展,將原本難以理解的網(wǎng)狀結(jié)構(gòu)轉(zhuǎn)換成相對簡單的星形結(jié)構(gòu)。
(2)可將各同事對象解耦,中介者模式有利于各同事之間的松耦合,可以獨立地改變和復(fù)用每一個同事和中介者,增加新的中介者類和新的同事類都比較方便,更好地符合開閉原則。
(3)可以減少子類的生成,中介者模式將原本分布于多個對象間的行為集中在一起,改變這些行為只需生成新的中介者子類即可,這使得各個同事類可被重用,無須直接對同事類進(jìn)行擴(kuò)展。

2、缺點

(1)具體中介者子類中包含了大量的同事之間的交互細(xì)節(jié),可能會導(dǎo)致具體中介者類非常復(fù)雜,使得系統(tǒng)難以維護(hù)。

總結(jié)

以上是生活随笔為你收集整理的设计模式(十七)中介者的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。