gpt4 book ai didi

java - 查找映射值并调用匹配的实现

转载 作者:行者123 更新时间:2023-12-01 09:44:55 24 4
gpt4 key购买 nike

我的类(class)设计如下:

public interface Device {
void create();
}

public class Printer implements Device {
@Override
public void create() {
}

public class Mouse implements Device {
@Override
public void create() {
}



public class ProcessImpl implements Processor {

private final Map<String, Set<String>> deviceMap = new HashMap<>();

@Override
public void process(String input) {
populateMap(input);

//call to `provision(deviceMap)`

}

deviceMap值的排列方式如下:{123=[P, M], 224=[C, P, M]}

哪里123ID和字符串值 C',电话 , M` 表示要根据相应 ID 创建的设备。

我的问题是,如何迭代 provision(deviceMap) 中的这张 map 方法和create通过调用相应的设备 create()方法。 (实现多态性)例如

何时 P -> 调用 create()Printer实现Device 。我可以用什么好的设计/模式来构建类?可以enum帮忙解决这个问题还是有更好的清洁方法?

最佳答案

对可能不正确的 Java 语法和约定表示歉意(我是 C# 开发人员),但是:

您可以拥有一个工厂,该工厂将在允许的字符串与 Device 类型之间进行映射:

public interface IDeviceFactory {
Device getDevice(string string input);
}

public class MappingDeviceFactory implements IDeviceFactory {

private Map<String, Device> _mapping;

public MappingDeviceFactory(Map<String, Device> mapping) {
_mapping = mapping;
}

public Device getDevice(string string input) {
//Look in the mapping for the input and return that device.
}
}

另一种方法是每个设备都会“说出”它的输入类型:

public interface Device {
String _type;
void create();
}

public abstract class DeviceBase {
public String _type;

public DeviceBase(String type) {
_type = type;
}

public abstract void create();
}

public class Printer implements DeviceBase {
public Printer() super ("P") {}
@Override
public void create() {}
}

然后在上面的 IDeviceFactory 实现中,只需映射 Device 集合,并根据给定的输入搜索该集合

<小时/>

关于映射的enumString:

  • 我更喜欢使用枚举而不是字符串,因为它可以帮助我防止传递错误的值。
  • 但是,如果您在编译时不知道 Device 的所有类型(这意味着您可以在 enum 中获得它们的值;就会发生如果其他人编写了更多 Device 并且您在运行时加载这些文件),那么我会选择以下两种之一:
    • 有一个对象DeviceRequestBase,其中包含:PrinterDeviceRequestMouseDeviceRequest...然后,如果向设备发出请求,工厂将在类型之间进行映射类型。
    • 如果这感觉有点大材小用,并且您不需要它如此可扩展 - 那么只需坚持使用 strings

关于java - 查找映射值并调用匹配的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142617/

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