2017-05-08 56 views
2

我知道中介模式的目的是讓每個同事不必互相認識就可以相互溝通。所有同事都只知道調解員。關於調解員設計模式的同事?

設計模式不是針對特定的語言,但我的問題是特定於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. 
        // ... 
    } 
    

如果沒有辦法把在界面同事參考調停,我已經想到的解決方案是:

  1. 作爲this example,刪除引用。假設沒有必要保留對調解員的引用。 (這會導致任何問題嗎?)

  2. 只需爲每個具體的同事定義一個參考。 (但這意味着代碼重複。)

  3. 作爲design-patterns-stories.com的示例,讓同事抽象,並接受沒有人會擴展同事的事實。

調解模式的結構(從design-patterns-stories.com):Mediator pattern from http://www.design-patterns-stories.com/patterns/Mediator/

+0

你說的是「領域」,「這個改變」等,但是你沒有發佈任何代碼行,所以我不明白你想問什麼。 –

回答

0

有兩件事情可以做。

  • 定義Colleague是擴展Mediator一個通用的,所以你不得不public class Colleague<? extends Mediator>

  • 即使模式來調用不要Mediator繼承。只需將它作爲參數傳入並調用通知即可。