代码之家  ›  专栏  ›  技术社区  ›  JARC

一个班可以被观察到,一个观察者可以吗?

  •  4
  • JARC  · 技术社区  · 15 年前

    有一个代码气味的时刻,无法决定是否可以观察到一个类,也是一个观察者,所以我想我会在这里张贴。

    class ObservableAndObserver extends Observable implements Observer {
    
     // Class is ofcourse registering and receving notifcations on different events
     // effectly actving as a middle man. 
    
     // Is this a pattern in itself?  'middleman-pattern' ??
    
    }
    

    思想?打破SRP?

    8 回复  |  直到 15 年前
        1
  •  3
  •   Marius    15 年前

    这在技术上是可以的,但您应该检查您是否只是在重新发送接收到的通知。如果这节课是在观察第1节课,然后被第2节课观察,那么试着让那节课观察第1节课。

        2
  •  1
  •   anon    15 年前

    我看不出有什么理由。混凝土 不过,这个例子很有用。更好的是您已经实现的、我们可以批评的真正代码。

        3
  •  1
  •   Sklivvz    15 年前

    没关系:-。如果类订阅了其他类事件,并且可以引发自己的事件,则可以。当然,你可以做错事,但是类的概念是寻找其他类,并且可以被观察是可以的。

        4
  •  0
  •   Austin Salonen gmlacrosse    15 年前

    虽然我同意尼尔的观点,但我可以看出这是一种代码味道,因为这门课可能做得太多了。

        5
  •  0
  •   dfa    15 年前

    只要对象观察到其他对象的事件,并且被其他对象观察到,就可以了。但是如果物体观察到它自己,可能有什么东西 真奇怪 .

    也许一些代码将有助于理解设计模式是否以一种奇怪的方式使用。

        6
  •  0
  •   Pete Kirkham    15 年前

    这是许多基于事件的系统实现过滤器的一种方式。另一个,在Java中,对于一个角色有一个内部类,但是如果过滤器有多个不同角色的观察员,则更常见。因此,如果您认为它可能会以不同的角色结束,那么您可能希望它为您当前想到的角色提供一个访问器。 getObserver() { return this; } ,但这可能是一个雅格尼,可以稍后添加。

        7
  •  0
  •   lalala    15 年前

    这是邪恶的。 B观察A并通知C。

    所以有一段代码表示a.setValue(…) C语言中的一些事情发生了。

    现在想想: 这段代码应该说: a.设定值(…); c.剂量测定(…);

    当然,这段代码现在必须知道A和C,但至少 没有魔法。一切都在阳光下。 隐藏在OO中的信息用于setValue(…)中的代码。 观察者/观察者模式中没有乘以2。

    干杯, L.

        8
  •  0
  •   Alejandro Teruel    11 年前

    您可能误入了一个名为 事件通道 ,在POSA手册中明确引用:

    “在此变体中,将在发布服务器与其订阅服务器之间创建和放置事件通道。对于发布服务器,事件通道显示为订阅服务器,而对于订阅服务器,事件通道显示为发布服务器”。(第341页)