中介者模式Mediator

本文探讨了软件构建中对象间复杂引用关系的问题,并介绍了如何通过中介者模式来解决这些问题。通过一个具体的例子,展示了如何利用中介者模式降低对象间的耦合度,使得各组件能够更加独立地工作。

背景:在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将会面临不断的变化。在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。

《设计模式》Gof :用一个中介对象来封装一系列对象的交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

演化:

(一)

class MenuItem

{

 TextArea textarea;

 ClipBoard clipboard;

 ToolBarButton toolbarbutton;

   public:

    void click()

   {

       //比如这样一个操作:从文本区选一段文件,剪到剪贴板,同时toolbar中的parse可用

      string text = textarea.selectedtext();

       textarea.removeselectiontext();

       clipboard.setdata(text);

       toolbarbutton.enableparsebutton(true);

    }

}

 

class TextArea

{

 ClipBoard clipboard;

 ToolBarButton toolbarbutton;

  cutmenuitem    cutmenuitem;

  public:

    void process()

   {

  }

}

 

class ClipBoard

{

ToolBarButton toolbarbutton;

  cutmenuitem    cutmenuitem;

 TextArea textarea;

 

}

 

class ToolBarBooton

{

  cutmenuitem    cutmenuitem;

 TextArea textarea;

 ClipBoard clipboard;

}

 

 

(二)

class abstract  class Mediator

{

   public :

    abstract void  notify() ;

}

 

 

abstract Element

{

   Mediator  mediator;

   public Element(Mediator &mediator)

    {

        mediator = mediator;

     }

   public void onchanged()

   {

       mediator.notify();

  }

}

 

class CutMenuItem:Element

{

   

   public  void click()

  {

      onchanged();

  }

 }

 

 

class  TextArea:Element

{

   

   public  void process()

  {

      onchanged();

  }

  

}

 

 

class ClipBoard::Element

{

   public  void invok()

  {

      onchanged();

  }

  

}

 

class ToolBarButton:Element

{

  

   public  void click()

  {

      onchanged();

  }

 

}

 

 

************************

class CorrectMediator: Mediator

{

  public override notify()

 {

 }

}

 

class abstract  class Mediator

{

   public :

    abstract void  notify() ;

   abstract void addelement(element & element)

 {

     list.add(element);

 }

 

 

  ArraryList<Element>  list = new ArraryList<Element>();

}

 

 

abstract Element

{

   Mediator  mediator;

   public Element(Mediator &mediator)

    {

        this->mediator = mediator;

        this->mediator.addelement(this);

     }

   public void onchanged()

   {

       mediator.notify();

  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值