首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现子系统通信设计模式

实现子系统通信设计模式
EN

Stack Overflow用户
提问于 2012-02-17 04:46:40
回答 2查看 836关注 1票数 1

我正在为以下内容寻找一个合适的设计模式:

我的系统结构如下:

代码语言:javascript
复制
MainApplication
    SubSystem1
    SubSystem2
    SubSystem3

在MainApplication初始化每个子系统的情况下,

代码语言:javascript
复制
    SubSystem1 s1;
    SubSystem2 s2;
    SubSystem3 s3;

    public MainApplication()
    {
        s1 = new SubSystem1();
        s2 = new SubSystem2();
        s3 = new SubSystem3();
    }

并且每个子系统应该能够相互通信。

在每个子系统中,我如何从另一个子系统调用方法?例如在s1

代码语言:javascript
复制
    public SubSystem1()
    {
        s2.Method1();
        s3.Method2();
    }

门面设计模式在这里可以工作吗?若有,将如何实施?如果不是,那么这个场景应该使用哪种设计模式呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-17 05:23:43

这在很大程度上取决于子系统之间的通信类型。

如果它是抽象的,即子系统实际上不必知道彼此,则基于发布-订阅的消息传递机制可能是合适的。有关介绍,请参阅https://en.wikipedia.org/wiki/Publish/subscribe,但我认为这个概念应该相当简单。

另一方面,如果子系统真的需要以一种具体的方式相互了解,为什么它们首先是子系统?进行这种划分表明确实存在关注点的分离,因此找到抽象接口应该不是那么困难。如果是,也许您应该重新考虑您的子系统职责。

票数 2
EN

Stack Overflow用户

发布于 2012-02-17 05:01:31

我从来没有记住过设计模式的名字。为什么不能让每个子系统知道其他子系统呢?

代码语言:javascript
复制
s1.SetSubsystem2(s2);
s1.SetSubsystem3(s3); 
...

如果您想更好地适应未来的变化,请在interface中描述每个子系统的接口,并确保SetSubsystemX使用该接口,而不是具体的类。

编辑:一个接口的例子。

假设第一个子系统知道如何发送电子邮件,第二个子系统知道如何打印文件。您应该声明两个接口:

代码语言:javascript
复制
interface IEmailSubsystem
{
    void SendEmail(string content);
}

interface IPrintSubsystem
{
    void PrintFile(string path);
}

然后,您可以定义两个子系统对象:

代码语言:javascript
复制
class Subsystem1: IEmailSubsystem ...
class Subsystem2: IPrintSubsystem ...

如果你最终需要3个以上的子系统,你应该有一个全局的子系统注册表,但现在不用担心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9318783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档