中介者模式和创作

中介者模式和创作

我在演示中涉及到几个“小部件”,它们需要彼此交互,但是交互已经变得足够复杂,以至于需要一个新的对象来处理交互。

在尝试通过调解员作为目标时,我对如何有效地构建参与者感到困惑。调解员必须了解小部件,而小部件也必须了解调解员。

使用下面的玩具类可以有人告诉我构造函数的外观以及通常以什么顺序创建?

干杯,
贝里

class WidgetOne {
    Mediator _mediator;
}

class WidgetTwo {
    Mediator _mediator;
}

class Mediator {
    WidgetOne _widgetOne;
    WidgetTwo _widgetTwo;
}

最佳答案

这确实取决于许多其他情况,但是我可能会这样做:

class Mediator {
    WidgetOne _widgetOne;
    WidgetTwo _widgetTwo;

    void setWidgetOne(WidgetOne one){_widgetOne = one;}
    void setWidgetTwo(WidgetTwo one){_widgetTwo = one;}
}

class WidgetOne {
    Mediator me
    void WidgetOne(Mediator me){
        this.me = me
        me.setWidgetOne(this);
    }
}

class WidgetTwo {
    Mediator me
    void WidgetTwo(Mediator me){
        this.me = me
        me.setWidgetTwo(this);
    }
}

Mediator me = new Mediator();
WidgetOne one = new WidgetOne(me);
WidgetTwo two = new WidgetTwo(me);


当然,如果没有其他需要了解的小部件,那么我将摆脱设置员,只需拥有以下功能:

class Mediator {
    WidgetOne _widgetOne;
    WidgetTwo _widgetTwo;

     void Mediator(){
        _widgetOne = new WidgetOne(this);
        _widgetTwo = new WidgetTwo(this);
     }
}

class WidgetOne {
    Mediator me
    void WidgetOne(Mediator me){
        this.me = me
    }
}

class WidgetTwo {
    Mediator me
    void WidgetTwo(Mediator me){
        this.me = me
    }
}


其他几个简短的...简短的形式:

// Factory:

class Mediator {
    WidgetOne _widgetOne;
    WidgetTwo _widgetTwo;

     void Mediator(){
        _widgetOne = WidgetFactory.getW1(this);
        _widgetTwo = WidgetFactory.getW2(this);
     }
}

class W1 {
    Mediator me
    void W1(){
    }
    void setMediator(Mediator med){me = med}
}

class WidgetFactory {
    W1 getW1(Mediator me){ W1 w = new W1(); w.setMediator(me); return me}
}


// Centralized "model" (variant of factory)
class Mediator {
   W1 w1;

   static Mediator getInstance(){ return inst; }// See Singleton

   void registerW1(W1 w){w1 = w; w.setMediator(this);}
}

关于design-patterns - 中介者模式和创作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6419004/

10-09 06:10