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

推荐订阅源

D
DataBreaches.Net
小众软件
小众软件
腾讯CDC
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Y
Y Combinator Blog
Engineering at Meta
Engineering at Meta
美团技术团队
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
罗磊的独立博客
aimingoo的专栏
aimingoo的专栏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
C
Check Point Blog
大猫的无限游戏
大猫的无限游戏
Recent Announcements
Recent Announcements

博客园 - 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();
  }

}