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

推荐订阅源

WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
C
Check Point Blog
宝玉的分享
宝玉的分享
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
量子位
Martin Fowler
Martin Fowler
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
J
Java Code Geeks
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
P
Proofpoint News Feed
美团技术团队
H
Help Net Security
B
Blog
博客园_首页

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

}