我正在制作网络应用程序。这是问题所在:
我有一个Messenger课程。 Messenger有几个名为ModuleA,B,C等的模块类。 信使发送MessagePacks(给其他信使)。每个MessagePack都有一个模块目的地意味着一旦它到达Messenger,它就被转发到正确的模块(A,B,C等)。
目前为了转发到正确的模块,我正在使用if-else检查MessagePack上的标签来决定转发的位置。
我想要做的是使用MessagePack子类而不是使用标签(标签是字符串)。所以TypeAMessage转到ModuleA等。我能想到的唯一方法就是在MessagePack中调用Messenger实例并调用像这样的方法:Messenger.fowardToModuleA(this);但是在MessagePack上有一个Messenger实例是没有意义的(并且可能会导致问题)。
有没有人能想到一种方法来完成我想要的任务而不使用if-else检查标记字符串,最好使用MessagePack子类?
答案 0 :(得分:3)
(其他)选项是让Module
决定他们接受哪个MessagePack
哪个不接受。因此,您的Messenger
仍然会包含/链接到多个Module
类,但只需将每个传入的MessagePack
转发给所有Modules
类
for ( Module module : modules ){
if ( module.canHandle( messagePack ) ){
module.handle( messagePack );
//if messagePacks should only be handled by one module, break
}
}
这些模块是否在messagepack上使用String标识符,或者只接受messagepack接口的某些特定实现由您决定。你有这种方法
Messenger
类,在添加模块或消息包类型时不需要调整不确定这是否是具有官方名称的官方设计模式,但这就是我将如何处理这个