【问题标题】:About colleague in mediator design pattern?关于调解器设计模式的同事?
【发布时间】: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接口中,我想到的解决办法是:

  1. 作为this example,删除引用。假设不需要保留对调解器的引用。 (这会引起什么问题吗?)

  2. 只需为每个具体同事定义一个引用即可。 (但这意味着代码重复。)

  3. design-patterns-stories.com为例,让同事抽象,接受没有人会扩展同事的事实。

中介者模式的结构(来自design-patterns-stories.com):

【问题讨论】:

  • 您在谈论“该领域”、“此更改”等。但是您没有发布任何代码行,所以我无法理解您所要求的任何内容。

标签: java design-patterns


【解决方案1】:

你可以做两件事。

  • Colleague 定义为扩展Mediator 的泛型,这样您就可以拥有public class Colleague<? extends Mediator>

  • 不要从Mediator 继承,即使模式需要它。只需将其作为参数传入并在其上调用通知即可。

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2013-06-12
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多