Design Pattern 17-Mediator

using System;
using System.Collections ;

namespace Pattern
{
 /// <summary>
 /// Summary description for Class1.
 /// </summary>
 /*這個模式的定義就很簡單用一箇中介對象來封裝一系列的對象交互。中介者

 使各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變

 它們之間的交互。好處是什麼呢?很顯然就是爲了降低複雜度.使的原本使多

 對多關係.現在變成了1對多關係.因爲所有對象都只和Mediator中介者單線聯

 系.而中介者隱士的包含了對象之間的關係.下面還是舉個簡單的事例.如:小王

 要把稿件交給小李.小李要把書籍交給小張.小張要把筆交給小王.並且小張要

 把隨身聽交給小李.這樣如果對象和對象之間交互會顯得很複雜.如果他們只

 是把物品交給一箇中介人.在由中介人負責派分物品.這樣每個人都只和中介人

 建立聯繫.而中介人維護對象之間的關係.*/

 //還是從接口開始
 public interface IPerson
 {
  string Name{get;}
  ArrayList Article {get;set;}//每個人可能有多個物品
 }

 public class Wang : IPerson
 {
  private string name="Wang";
  private ArrayList article;

  public string Name
  {
   get{return name;}
  }

  public ArrayList Article
  {
   get{return article;}
   set{article=value;}
  }
  //.......做其他的事情
 }

 public class Zhang : IPerson
 {
  private string name="Zhang";
  private ArrayList article;

  public string Name
  {
   get{return name;}
  }

  public ArrayList Article
  {
   get{return article;}
   set{article=value;}
  }
  //.......做其他的事情
 }

 public class Lee:IPerson
 {
  private string name="Lee";
  private ArrayList article;

  public string Name
  {
   get{return name;}
  }

  public ArrayList Article
  {
   get{return article;}
   set{article=value;}
  }
  //.......做其他的事情
 }


 //中介人
 public interface IMediator
 {
  //交換物品
  void SweapArticle(IPerson p1,IPerson p2,object at);
 }

 public class ConcreteMediator : IMediator
 {
  
  public  void SweapArticle(IPerson p1,IPerson p2,object at)
  {
   p1.Article.Add(at);
   p2.Article.Remove(at);
  }
 }

 
}

   //中介者模式
   
//   IMediator m = new  ConcreteMediator();
//   IPerson wang=new Wang();
//   IPerson zhang=new Zhang();
//   IPerson lee=new Lee();
//
//   wang.Article.Add("稿件");
//   zhang.Article.Add("書籍");
//   lee.Article.Add("筆");
//   lee.Article.Add("隨身聽");
//
//   //交換開始
//   m.SweapArticle(wang,zhang,"稿件");
//   m.SweapArticle(zhang,lee,"書籍");                                                        
//   m.SweapArticle(lee,zhang,"筆");
//   m.SweapArticle(lee,wang,"隨身聽"); 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章