1. 程式人生 > >設計模式のMediatorPattern(中介者模式)----行為模式

設計模式のMediatorPattern(中介者模式)----行為模式

短信 應該 console ons read 操作 namespace 原則 針對

一、產生背景

從生活中的例子可以看出,不論是QQ遊戲還是QQ群,它們都是充當一個中間平臺,QQ用戶可以登錄這個中間平臺與其他QQ用戶進行交流,如果沒有這些中間平臺,我們如果想與朋友進行聊天的話,可能就需要當面才可以了。電話、短信也同樣是一個中間平臺,有了這個中間平臺,每個用戶都不要直接依賴與其他用戶,只需要依賴這個中間平臺就可以了,一切操作都由中間平臺去分發。了解完中介模式在生活中的模型後,下面給出中介模式的正式定義。

中介者模式,定義了一個中介對象來封裝一系列對象之間的交互關系。中介者使各個對象之間不需要顯式地相互引用,從而使耦合性降低,而且可以獨立地改變它們之間的交互行為。

二、實現方式

從生活中例子自然知道,中介者模式設計兩個具體對象,一個是用戶類,另一個是中介者類,根據針對接口編程原則,則需要把這兩類角色進行抽象,所以中介者模式中就有了4類角色,它們分別是:抽象中介者角色,具體中介者角色、抽象同事類和具體同事類。中介者類是起到協調各個對象的作用,則抽象中介者角色中則需要保存各個對象的引用。

三、實例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MediatorPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            AbstractCardPartner A = new ParterA();
            AbstractCardPartner B 
= new ParterB(); // 初始錢 A.MoneyCount = 20; B.MoneyCount = 20; AbstractMediator mediator = new MediatorPater(A, B); // A贏了 A.ChangeCount(5, mediator); Console.WriteLine("A 現在的錢是:{0}", A.MoneyCount);// 應該是25 Console.WriteLine("
B 現在的錢是:{0}", B.MoneyCount); // 應該是15 // B 贏了 B.ChangeCount(10, mediator); Console.WriteLine("A 現在的錢是:{0}", A.MoneyCount);// 應該是15 Console.WriteLine("B 現在的錢是:{0}", B.MoneyCount); // 應該是25 Console.Read(); } } // 抽象牌友類 public abstract class AbstractCardPartner { public int MoneyCount { get; set; } protected AbstractCardPartner() { MoneyCount = 0; } public abstract void ChangeCount(int count, AbstractMediator mediator); } // 牌友A類 public class ParterA : AbstractCardPartner { // 依賴與抽象中介者對象 public override void ChangeCount(int count, AbstractMediator mediator) { mediator.AWin(count); } } // 牌友B類 public class ParterB : AbstractCardPartner { // 依賴與抽象中介者對象 public override void ChangeCount(int count, AbstractMediator mediator) { mediator.BWin(count); } } // 抽象中介者類 public abstract class AbstractMediator { protected AbstractCardPartner A; protected AbstractCardPartner B; protected AbstractMediator(AbstractCardPartner a, AbstractCardPartner b) { A = a; B = b; } public abstract void AWin(int count); public abstract void BWin(int count); } // 具體中介者類 public class MediatorPater : AbstractMediator { public MediatorPater(AbstractCardPartner a, AbstractCardPartner b) : base(a, b) { } public override void AWin(int count) { A.MoneyCount += count; B.MoneyCount -= count; } public override void BWin(int count) { B.MoneyCount += count; A.MoneyCount -= count; } } }

四、模式分析

優點: 1、降低了類的復雜度,將一對多轉化成了一對一。 2、各個類之間的解耦。 3、符合迪米特原則。

缺點:中介者會龐大,變得復雜難以維護。

設計模式のMediatorPattern(中介者模式)----行為模式