2010-07-27 62 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种方法做到这一点,所以我们期待各种答案。