在下面的用例中,我得到了包含JsonString1的事件,我必须进行一些处理/转换,才能通过对象4到达Object1。到目前为止,我只有一个这样的案例,而且很可能在将来会有更多这样的层次结构(最高为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() {
}
}而类似的实现则随着时间的推移而出现更多的事件。
有更好的方法吗?
另外,目前有两件事是不变的,但在极少数情况下可能会发生变化。
我是否也可以通过为字符串转换提供接口来适应这样的更改,还是说这是过头了?
通常,我被困在这样的地方,我试图找出最优雅的方法来做这件事,并最终花费了大量的时间?对此也有什么一般性的建议吗?)
谢谢
发布于 2013-11-17 16:44:03
你到底想要什么还不太清楚。然而,即使没有它,当我看到你的等级制度,它闻起来。通常,在我的代码评审过程中,每当我看到像您这样的层次结构太花哨时,设计中就会出现一些问题。
试着考虑使用装饰,以避免继承地狱。因此,您可以创建任何组合,您可能需要在近期和遥远的未来。在标准的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);
}
}https://stackoverflow.com/questions/16132531
复制相似问题