【发布时间】:2017-05-08 13:41:14
【问题描述】:
我知道中介者模式的目的是每个同事不必互相认识就可以相互交流。所有同事都只知道调解员。
设计模式不是针对特定语言的,但我的问题是针对 Java 的。
我想把一个子类的字段放到超类中,但是在java中会出现一些问题:
在Java中,接口中的所有字段都是
public static final,使用这些字段也不是一个好习惯。 (Why)-
如果我把对中介者的引用放在接口同事中,那么每个具体的同事都不能在运行时改变它的中介者,因为它是最终的:
interface Colleague { Mediator mediator; // Which is public static final }所以在程序中,
{ // ... colleague.changeMediator(newMediator); // this is impossible. // ... }.
-
正如下面的结构,同事是一个抽象类。那么这种模式就没有用了,因为具体的同事可能已经继承了其他一些类,Java 中不允许多重继承。
Foo 不能成为具体的同事,因为它已经继承了 Bar。
public class Foo extends Bar, Colleague { // this is impossible. // ... }
如果没有办法将对中介器的引用放在Colleague接口中,我想到的解决办法是:
作为this example,删除引用。假设不需要保留对调解器的引用。 (这会引起什么问题吗?)
只需为每个具体同事定义一个引用即可。 (但这意味着代码重复。)
以design-patterns-stories.com为例,让同事抽象,接受没有人会扩展同事的事实。
中介者模式的结构(来自design-patterns-stories.com):
【问题讨论】:
-
您在谈论“该领域”、“此更改”等。但是您没有发布任何代码行,所以我无法理解您所要求的任何内容。
标签: java design-patterns