2014-10-02 73 views
1

試圖說抽象: 我嘗試爲組件和定向連接器的網絡設計通用模式。所有提供者都通過連接器連接。 因此,沒有損失一般性的,想象組件和連接鏈(簡單網絡),我們有這樣的事情: COMPA - > ConnectorAB - > CompB的 - > ConnectorBC - > compc命令......等等Cyclomatic泛型代碼設計

由於連接器應該是具有某些屬性和功能的實際對象,因此我不能僅僅實現類似雙鏈列表的備件。

組件將列表中的輸入和輸出連接器保存在一個列表中,並且連接器保存其源和目標組件。 我給你我的一個實例運行:

interface Component<In extends Connector, Out extends Connector> { List<In> getIns();...} 

interface Connector<S extends Component, T extends Component> { S getSource();...} 

interface CompA<In extends Connector<?, CompA>, Out extends Connector<CompA, ?>> extends Component<In, Out> {} 

interface CompB<In extends Connector<?, CompB>, Out extends Connector<CompB, ?>> extends Component<In, Out> {} 

interface A_A extends Connector<CompA, CompA> {} 

interface A_B extends Connector<CompA, CompB> {} 

問題:

  • 我)圈通用depedencies:我可以巢泛型無限(Component<Connector<Component.......>>>),而不是我使用原始類型,這是罰款,但無論如何它似乎是混亂的。
  • ii。)我想用CompA<In extends Connector<?, CompA>, Out extends Connector<CompA, ?>>表達的是,我的CompA知道它已連接到針對CompA的連接器。顯然這不是我在語法上做的事。 。
  • III) A_A aa; aa.getSource(); //gives me a CompA, thats great. aa.getSource().getIns(); //gives me a List of raw Connectors, but i would like to have a list of partially defined connectors, they know they are referencing a compA aa.getSource().getIns().get(0).getTarget() // should give me a compA 寫我的代碼,因爲它是,很明顯,這並不工作,因爲我想它,但是我認爲'aa.getSource()getIns();'可以工作作爲對在-Type至少是一個連接器的權利?
  • 我在尋求建議來實現這個模式(所以說,糾正我的代碼!)。它必須在java中,但我不必只使用java泛型。如果你可以使用非java通用模式來完成這個抽象模式,它可能會很好(基於其他Java語言特性或OO模式的模式)。

    我想我錯過了很多信息,所以如果有些事情不清楚,請詢問。

    回答

    3

    我認爲以下將最好地模擬您的要求。您可能仍會遇到一些差異和/或刪除問題。如果你這樣做,我會建議你完全放棄泛型而不是訴諸於原始類型。

    interface Component<SELF extends Component<SELF>> { Set<Connector<?, SELF>> getIns();...} 
    
    interface Connector<SOURCE extends Component<SOURCE>, DESTINATION extends Component<DESTINATION>> { SOURCE getSource();...} 
    
    interface CompA extends Component<CompA> {} 
    
    interface CompB extends Component<CompB> {} 
    
    interface A_A extends Connector<CompA, CompA> {} 
    
    interface A_B extends Connector<CompA, CompB> {} 
    
    +0

    +1,這正是我以前想到的:) – sp00m 2014-10-02 10:12:29

    +0

    我必須在判斷之前實施一點,但它是完美的!非常感謝你,我可以問你,你是怎麼想出來的?它是否立即出現在您的腦海中?或者它實際上是一種已經在任何地方使用過的模式? – user2504380 2014-10-02 12:35:59

    +0

    @ user2504380自我類型模式('Foo >',也被稱爲F-有界量化)是一種相當常見的模式。一旦你有了,剩下的就落在原地。所以,是的,當我閱讀你的要求時,解決方案立刻就出現在我的腦海裏。但現在你知道自我類型的模式,它也會對你的。 ;) – 2014-10-02 17:32:16