gpt4 book ai didi

Java设计模式/转换模式

转载 作者:行者123 更新时间:2023-12-01 04:43:54 25 4
gpt4 key购买 nike

我有以下用例,其中我获取包含 JsonString1 的事件,我必须进行一些处理/转换才能通过对象 4 到达对象 1。到目前为止,我只有一个这样的情况,并且将来很可能会出现这种情况可能会有更多这样的层次结构(最多 2-3 个)。

我无法决定什么是一种优雅的编码方式。

        JsonString1
|
JsonString2
/ \
JsonString3 JsonString4
| |
Object1 Object2
|
Object3

我可以有一个抽象类来处理 JsonStrings 1 到 4 以及每种类型事件的具体实现。类似的东西

public abstract class AbstractEventProcessor {
public AbstractEventProcessor(String jsonString1) {
// Do processing to get JsonString2, JsonString3 and JsonString4
}
}

public class Event1Processor extends AbstractEventProcessor {
Event1Processor(String str) {
super(str);
}
Object1 getObject1() {
}
Object2 getObject2() {
}
Object3 getObject3() {
}
}

类似的实现会带来更多事件。

有更好的方法吗?

目前有两件事是不变的,但在极少数情况下可能会发生变化。

  1. 所有事件都会有 JsonString1 .. JsonString4 但最后的对象数量会有所不同。但将来这种情况可能会改变。
  2. 虽然字符串的格式不太可能(但并非不可能)发生变化(例如从 json 更改为 xml)

我是否也通过提供字符串转换接口(interface)来适应此类更改,或者这是一种矫枉过正?

通常我会被困在这样的地方,我试图找出最优雅的方法来做到这一点,但最终却花了很多时间?对此还有什么一般性建议吗? :)

谢谢

最佳答案

目前还不太清楚你到底想要什么。然而,即使没有它,当我看到你的等级制度时,它还是有味道的。 通常,在我的代码审查过程中,每当我看到像你这样过于花哨的层次结构时,设计中就会出现问题。

尝试考虑使用装饰器来避免继承 hell 。因此,您可以创建在不久的将来和遥远的将来可能需要的任何组合。在标准java类中获得一些灵感java.io.Reader及其子类。

对于您的情况,这意味着类似这样的事情(至少我是如何理解您的描述的):

public interface EventProcessor {
public BaseObject processJsonString(String jsonString);
}

public abstract class AbstractEventProcessor implements EventProcessor {
final private EventProcessor processor;
public AbstractEventProcessor(EventProcessor processor) {
this.processor = processor;
}
}

public class SpecialObject1 extends/implements BaseObject { ... }
public class SpecialObject2 extends/implements BaseObject { ... }
public class SpecialObject3 extends/implements BaseObject { ... }

// Each your future processor will look like this
public class Event1Processor extends AbstractEventProcessor implements EventProcessor {
public Event1Processor(EventProcessor processor) {
super(processor);
}
public SpecialObject1 processJsonString(String jsonString) {
final SpecialObject1 result = (SpecialObject1) super.processJsonString(jsonString);
// here you add this Event processor specific stuff
...
return result;
}
// Maybe more methods here
}

public class Client {
public void useEventProcessor() {
final EventProcessor processor1 = new Event1Processor(new Event2Processor(new Event3Processor(null)));
final SpecialObjectX object1 = processor.processJsonString(jsonString);

final EventProcessor processor2 = new Event51Processor(new Event20Processor(new Event2Processor(null)));
final SpecialObjectY object2 = processor2.processJsonString(jsonString);

}
}

关于Java设计模式/转换模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16132531/

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