积木

No sub title

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

Mediator模式
      该模型主要解决两个或多个对象间的相互通信的问题。(个人认为该模式的思想同Observer模式的思想还是有点类似的。表面上看,他们所解决的问题类型根本不同,那为什么我会这么认为了?后面再说明)。按理说,各对象间的通信假如:ObjA与ObjB要进行通信。方法有好多种。比如:可以在它们内部各存一份对方的引用。在一方变动时,调用另一方进行同步即可。但确实如果系统大而复杂时,这将显示的不那么清晰。因此,就希望中间会有个调停者。Mediator模式就因此而生。此时,ObjA与ObjB内部只存为一份Mediator(MediatorObj)对象的引用。在对象变动时,只需调用MediatorObj的相关接口,通知其他对象需要同步更新即可。因此,对ObjA或ObjB或其他的任何对象来说,它们有可能根本不知道还有其他的对象存在。(如:ObjA可能不知道ObjB的存在。)但通过MediatorObj对象,却达到了ObjA与ObjB的同步作用。(现在想下,是不是与Observer模式有点类似?因为,如果在Observer模式的实现上,抽象出一个IObserverable来。那通过IObserverable对象,可以通知所有View的更新)。
 

class CClassA;
class CClassB;

class CMediator
{
public:
    CMediator(){}
    CMediator(CClassA
* pObjA, CClassB* pObjB)
    {
        
this->m_pObjA = pObjA;
        
this->m_pObjB = pObjB;
    }
    
void DoSyncFromAToB(void)
    {
        
this->m_pObjB->xxx
    }
    
void DoSyncFromBToA(void)
    {
        
this->m_pObjA->xxx
    }
private:
    CClassA
* m_pObjA;
    CClassB
* m_pObjB;
};

class CClassA
{
public:
    CClassA(){}
    CClassA(CMediator
* pMediator)
    {
        
this->m_pMediator = pMediator;
    }
    
void DoAction(void)
    {
        
// do some work here
        
        
// 通知其他对象,需要同步
        this->m_pMediator->DoSyncFromAToB();
    }

private:
    CMediator
* m_pMediator;
};

class CClassB
{
public:
    CClassB(){}
    CClassB(CMediator
* pMediator)
    {
        
this->m_pMediator = pMediator;
    }
    
void DoAction(void)
    {
        
// do some work here
        
        
// 通知其他对象,需要同步
        this->m_pMediator->DoSyncFromBToA();
    }

private:
    CMediator
* m_pMediator;
};
posted on 2011-06-28 10:26 Jacc.Kim 阅读(949) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理