我正在创建一个非常复杂的视图,其中许多不同的组件必须相互通信。我不是OOP的大师,我刚刚阅读了“Head First Design Patterns”的一半,还有很多关于设计模式的网络教程。我的设计很快变得复杂,引入中介模式极大地帮助我组织了Swing组件之间的通信。
但我仍然对正确实施它有一些担忧,我想在这里讨论它们,希望有一些新的想法。
设计非常复杂,许多组件必须与中介进行通信。它们中的一些是对象组合的一部分,它们是对象组合的一部分......有时我将调解器引用传递给一个对象,只是为了允许其中一个字段与它进行通信。显而易见的想法是将mediator实例转换为singleton,所以我可以避免这种无用的传递。我发现Stack Overflow上的一些人已经考虑过这种处理这个问题的方法,但其他人在评论中不鼓励这样的想法,因为它引入了耦合...如果真的是一个坏主意如何避免这两个问题(使用单例并冗余地将中介传递给仅将其传递给其字段的对象)?
复杂的视图导致中介的实现也很复杂,并且很少有神对象。我的想法是试图将这个单一的调解员切割成一组更专业的(次)调解员。但实际上我不知道如何做这样的事情......介绍分裂到较小对象的中介可以至少以两种方式实现:
a)针对不同行动组的单独调解员,但问题是我恐怕最终我必须将每个新调解员的实例传递给组件,因为他们的行为会导致许多不同的变化。调解器的想法是让组件不知道会对他们的请求作出反应的对象,但是通过这种方法,我将失去单个中介接口的好处。
b)它将导致创建(子)调解员,他们将知道如何处理特定类型的行动。我将以主调解器的中等分割结束,它已经注册了所有组件,但会将请求传递给(子)调解器,并且不需要更改组件正在说话的界面。
我有这两个问题很长一段时间,我已经阅读了很多关于mediator的教程,但是每次都有一个非常简单的例子进行解释,并且没有解释应该在哪里创建mediator作为demo是主要的()。我终于决定尝试一下。