gpt4 book ai didi

java - 我应该如何处理代码中的 item 'type' 字符串,以便它们在应用程序之间保持一致?

转载 作者:行者123 更新时间:2023-12-02 02:05:41 25 4
gpt4 key购买 nike

这似乎是一个愚蠢的问题,但对我来说,如何在 java 代码中处理这个问题并不明显:

我有许多设备通过 API 与我的系统进行交互。它们各自有一种类型,例如电视、智能手机、笔记本电脑。
我的代码需要根据这种类型执行许多不同的操作。系统中的许多其他服务器都是这种情况。
与每个设备相关的记录都存储在数据库中,包括类型。

目前我正在做的是拥有一个静态类,其中包含对每种类型的引用,如下所示:

DeviceType.SMART_PHONE

然后我就到处使用它。每个项目都可能有一个这样的类。所以它的使用方式是:

if(device.getType().equals(DeviceType.SMART_PHONE){
// stuff happens
}
有时我会在使用它们的类中拥有公共(public)静态变量,因此在设备对象本身中。

像这样的事情的最佳实践是什么?

最佳答案

对我来说,这看起来像是一个策略模式,因为您正在为每个 DeviceType 做不同的事情。在这种情况下,您可以有一个通用接口(interface)来执行发生的事情(无论是什么)。例如:

// if you have java-8, this could be replaced with java.util.Consumer for example
interface Handler {
public void handle();
}

然后您就可以创建所有需要的处理程序。

static class SmartPhoneHandler implements Handler {
public void handle(){
// handle smart phone logic here
}
}

您需要将它们注册到Map:

Map<DeviceType, Handler> strategies = new HashMap<>(); // or EnumMap in case DeviceType is an enum
strategies.put(DeviceType.SmartPhone, new SmartPhoneHandler());
// all others like this

以后的用法是:

strategies.get(device.getType()).handle()

如果您需要一些参数作为handle方法的输入 - 您应该创建另一个名为StrategyContext的持有者,它会将所需的参数作为输入,例如:

 static class StrategyContext {
private final int deviceId; // for example
// .... constructor/getters
}

因此您的 handle 方法将更改为:

handle(StrategyContext context)

关于java - 我应该如何处理代码中的 item 'type' 字符串,以便它们在应用程序之间保持一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833394/

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