我正在尝试为以下问题找到一个优雅的 OOP 解决方案。
假设我们有一个 POJOS 的集合,在本例中是事件,其中每个 POJO 可能是不同的类。我们需要对每个 POJO 类(或类型)使用不同的规则来处理这个集合。
一个基本假设是,我们无法使用适当的处理程序来装饰 POJO,因为我们无法控制它们的生成,并且按原样接收集合。因此,任何机制都会落入同样的陷阱。然而,第 3 条仍然涉及这种可能性。
有一些可能的解决方案,有些非常丑陋,有些更优雅但复杂:
- 最明显也是最丑陋的解决方案是使用 instanceOf 运算符将 POJO 传递给处理程序。
- 对 1 的一个稍微更好的修改是使用责任链和链式调度程序,以便新类型只需要一个新的调度程序。然而,每个调度程序仍然需要instanceOf。
- 创建增强对象,而不是 POJOS,其中每个对象都保存对其处理程序的引用。这会在 POJO 和我们的处理器之间创建耦合。
- 创建(我知道如何在Java中正确执行此操作)一个调度程序服务,该服务将处理程序注册到特定的事件类,并使用泛型(类型安全容器,如有效的java中)将事件调度到处理程序。
4是最优雅的,但我想知道是否有更好的想法。
最佳答案
#4 的简化:
使用映射来存储每个事件类的处理程序。
Map<Class, Handler> classHandlers = new HashMap<Class, Handler>();
classHandlers.put(EventA.class, new EventAHandler());
classHandlers.put(EventB.class, new EventBHandler());
现在使用事件的类来获取事件的处理程序。
Handler handler = classHandlers.get(event.getClass());
handler.handle(event);
当然,这需要在编码时了解所有可能的事件类,因此不如外部事件调度程序灵活。
关于java - 使用混合 POJOS 处理集合,每个 POJO 使用不同的处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771995/