惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
小众软件
小众软件
博客园 - 【当耐特】
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
H
Help Net Security
博客园_首页
P
Proofpoint News Feed
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
N
Netflix TechBlog - Medium
爱范儿
爱范儿
MyScale Blog
MyScale Blog
Blog — PlanetScale
Blog — PlanetScale
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Google DeepMind News
Google DeepMind News

博客园 - AlanPaoPao

23)Visitor 22)Template 21)Strategy 20)State 19)Observer 18)Memento 16)Iterator 15)Interpreter 14)Command 13)Chain Of Responsibility 12)Proxy 11)Flyweight 10)Facade 09)Decorator 08)Composite 07)Bridge 06)Adapter 05)Prototype 04)Factory Method
17)Mediator
AlanPaoPao · 2007-09-21 · via 博客园 - AlanPaoPao

    中介者模式的目的是: 把一个特定对象集合的职责集中,进行封装
    实例代码:

abstract class AbstractChatroom
{
  
public abstract void Register(Participant participant);
  
public abstract void Send(string from, string to, string message);
}

class Chatroom : AbstractChatroom
{
  
private Hashtable participants = new Hashtable();
  
public override void Register(Participant participant)
  
{
    
if (participants[participant.Name] == null)
    
{
      participants[participant.Name] 
= participant;
    }

    participant.Chatroom 
= this;
  }

  
public override void Send(string from, string to, string message)
  
{
    Participant pto 
= (Participant)participants[to];
    
if (pto != null)
    
{
      pto.Receive(from, message);
    }

  }

}

class Participant
{
  
private Chatroom chatroom;
  
private string name;
  
public Participant(string name)
  
{
    
this.name = name;
  }

  
public string Name
  
{
    
get return name; }
  }

  
public Chatroom Chatroom
  
{
    
set { chatroom = value; }
    
get return chatroom; }
  }

  
public void Send(string to, string message)
  
{
    chatroom.Send(name, to, message);
  }

  
public virtual void Receive(string from, string message)
  
{
    Console.WriteLine(
"{0} to {1}: '{2}'", from, Name, message);
  }

}

class Beatle : Participant
{
  
public Beatle(string name)
    : 
base(name)
  
{
  }

  
public override void Receive(string from, string message)
  
{
    Console.Write(
"To a Beatle: ");
    
base.Receive(from, message);
  }

}

class NonBeatle : Participant
{
  
public NonBeatle(string name)
    : 
base(name)
  
{
  }

  
public override void Receive(string from, string message)
  
{
    Console.Write(
"To a non-Beatle: ");
    
base.Receive(from, message);
  }

}

class MainApp
{
  
static void Main()
  
{
    Chatroom chatroom 
= new Chatroom();
    Participant George 
= new Beatle("George");
    Participant Paul 
= new Beatle("Paul");
    Participant Ringo 
= new Beatle("Ringo");
    Participant John 
= new Beatle("John");
    Participant Yoko 
= new NonBeatle("Yoko");
    chatroom.Register(George);
    chatroom.Register(Paul);
    chatroom.Register(Ringo);
    chatroom.Register(John);
    chatroom.Register(Yoko);
    Yoko.Send(
"John""Hi John!");
    Paul.Send(
"Ringo""All you need is love");
    Ringo.Send(
"George""My sweet Lord");
    Paul.Send(
"John""Can't buy me love");
    John.Send(
"Yoko""My sweet love");
    Console.Read();
  }

}