gpt4 book ai didi

oop - 大型嵌套 switch 语句的设计模式

转载 作者:行者123 更新时间:2023-12-04 16:08:08 24 4
gpt4 key购买 nike

我搜索了很多关于重构大型 switch 的文章陈述。

但他们不做我想做的事。问题我要去要运行的是有一个巨大的 switch 语句,它根据两个不同的值调用不同的方法,比如说 type和一个 code .

目前,我会处理这样的情况:

switch (type)
{
case Types.Type1:
handleType1(code);
break;

case Types.Type2:
handleType2(code);
break;
}

void handleTypeN(code)
{
switch (code)
{
...
}
}

也许结合工厂和命令模式的东西会帮助我?我一定遗漏了一些明显的东西。

你会如何重构这段代码?

我可能需要更具体地了解我面临的情况。

我正在从服务器接收数据包。一个数据包包含一个类型和一个代码以及一些特定的信息。

数据一到达我就检索 typecode数据包,它进入 switch type 声明,在弄清楚 type 之后调用特定方法对 code进行切换的数据包。

处理代码的方法现在进一步解码数据包并完成该过程。
+----------+                +----------+
| | Packet | |
| Server | -------------> | Client |
| | | |
+----------+ +----------+
|
|
(Switch on the type of the packet and call a specific method)
|
|
(Switch on the code of the packet and call a specific method)
|
|
(Respond to the server or not)

最佳答案

2 模式进入脑海:命令和访问者:
http://en.wikipedia.org/wiki/Command_pattern
http://en.wikipedia.org/wiki/Visitor_pattern

Abstract Class Command {

executeSomething();

}
Class typeN extends command {

executeSomething() {
//...
}
}

Class typeM extends command {

executeSomething() {
//...
}
}

replace your switch by :
//my old switch
class commandManager {

processCommand() {
for listOf command in a command buffer
{
onCommand(listOfcommand.command)
}
}
onCommandPoped(command type) {
type.executeSomething()
}

}

you can pass parameters to executeSomething, and you can pass another command


the client code :

{
commandN = new CommandN()
commandManager.postCommand( commandN)
}

阅读您的数据包服务器用例后,我认为您可以使用策略模式的变体
http://www.oodesign.com/strategy-pattern.html
您选择在数据包到达时调用的策略
你可以用工厂来 build 它。

但你不会杀死你的开关盒

请记住,一个服务器可以为多个客户端提供服务。如果可能是您的 switch case 比对象实例化更快。

关于oop - 大型嵌套 switch 语句的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com