2010-07-27 56 views
0

我有一個關於這個場景的設計問題: 假設你有一個表格,許多網站需要填寫,我們給每個站點打一個插件。 在其他類我創建了一個PluginManager類,它的所有插件的證據,並提供了一些功能和特性:C#類的通信設計問題

class PluginManager 
{ 
    ... 
    BasePlugin CurrentPlugin {get;set;} 
    IEnumerable<BasePlugin> OpenedPlugins {} 
    bool SetPlugin() {..} 
    ... 
} 

class BasePlugin {} 
class MyPlugin : BasePlugin {} 

在其他變薄,它處理顯示所選擇的插件/網站

到現在爲止,我從來不需要在2個或多個插件之間進行通信。現在我做了,我想問你,你會怎麼做。

我的意見是,EN Event添加到BasePlugin類和PluginsManager類處理它,在某些方面,該插件提高Event將在EventArgs的類型應該影響到所有其他插件和列表提供指向應該執行的方法的delegates

你有什麼想法嗎?謝謝 !

+0

什麼樣的溝通?一個簡單的方法調用,複雜的消息傳遞等? – 2010-07-27 08:30:46

+0

讓我們來說一個簡單的方法調用! – 2010-07-27 08:32:22

回答

2

看看"Chain Of Responsibility" Pattern。插件呼叫經理從處獲得一些信息。經理要求每個插件將信息放入提供的界面中。 (什麼是Visitor Pattern)。

電賀 弗洛

+0

我提出了Mediator模式,這是一種「推送」方法(插件會廣播信息),同時你已經建議Chain of Responsability爲'pull'方法,我沒有想到!爲你+1。 – 2010-07-27 08:37:30

+0

@Dr Herbie:爲你另一個好主意+1 :-)。正如你已經提到的,它總是取決於。 – 2010-07-27 08:41:57

1

聽起來像一個可能Mediator Pattern,我(也here請參閱使用C#代碼的描述)。

中介類處理其他類之間的通信。您的PlugInManager類將擁有一個私人Mediator實例,並且所有插件都將向中介註冊以接收通信。

大概有101種方法做到這一點,所以我們期待各種答案。