1

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

我有以下系统结构:

MainApplication
    SubSystem1
    SubSystem2
    SubSystem3

MainApplication 初始化每个子系统的地方,

    SubSystem1 s1;
    SubSystem2 s2;
    SubSystem3 s3;

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

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

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

    public SubSystem1()
    {
        s2.Method1();
        s3.Method2();
    }

立面设计模式可以在这里工作吗?如果是这样,它将如何实施?如果不是这种情况应该使用哪种设计模式?

4

2 回答 2

2

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

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

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

于 2012-02-16T21:23:42.913 回答
0

我永远记不起设计模式的名称。为什么不能让每个子系统知道其他子系统?

s1.SetSubsystem2(s2);
s1.SetSubsystem3(s3); 
...

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

编辑:一个界面的例子。

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

interface IEmailSubsystem
{
    void SendEmail(string content);
}

interface IPrintSubsystem
{
    void PrintFile(string path);
}

然后你可以定义你的两个 Subsystem 对象:

class Subsystem1: IEmailSubsystem ...
class Subsystem2: IPrintSubsystem ...

如果您最终需要超过 3 个子系统,您应该有一个全局子系统注册表,但暂时不要担心。

于 2012-02-16T21:01:31.453 回答