我正在寻找适合以下的设计模式:
我有以下系统结构:
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();
}
Facade Design Pattern会在这里运作吗?如果是这样,它将如何实施?如果不是这种情况应该使用哪种设计模式?
答案 0 :(得分:2)
这很大程度上取决于子系统之间的通信类型。
如果它是抽象的,即子系统实际上不必彼此了解,则基于发布 - 订阅的消息传递机制可能是合适的。请参阅https://en.wikipedia.org/wiki/Publish/subscribe作为介绍,但我认为这个概念应该是相当简单的。
另一方面,如果子系统真的必须以具体方式相互了解,为什么它们首先是子系统?进行这种分区表明确实存在关注点分离,因此找到一个抽象的接口应该不那么难。如果是,也许您应该重新考虑子系统的职责。
答案 1 :(得分:0)
我永远无法记住设计模式名称。为什么不能让每个子系统知道其他子系统?
s1.SetSubsystem2(s2);
s1.SetSubsystem3(s3);
...
如果您希望更具未来变化能力,请在interface
中描述每个子系统的接口,并确保SetSubsystemX采用该接口,而不是具体的类。
编辑:界面的一个例子。
假设您的第一个子系统知道如何发送电子邮件,第二个子系统知道如何打印文件。您应该声明两个接口:
interface IEmailSubsystem
{
void SendEmail(string content);
}
interface IPrintSubsystem
{
void PrintFile(string path);
}
然后您可以定义两个子系统对象:
class Subsystem1: IEmailSubsystem ...
class Subsystem2: IPrintSubsystem ...
如果你最终需要超过3个子系统,你应该有一个全局子系统注册表,但不要担心它。