【发布时间】:2009-05-25 16:54:03
【问题描述】:
假设我有一个名为“Controller”的接口。有几个类实现了这个接口,我不知道这些类(例如,类名位于 xml 文件中)。现在,为了让这个控制器实现类工作,他们必须获得对其他对象(可能是数据对象)的一些引用。这是我的问题,即初始化此类对象(控制器对象)的最佳方法是什么?
我想到了几种解决方案,但我不确定这里最好的方法是什么。
首先:当从类名实例化对象时,我可以搜索“特殊”构造函数(通过反射),它具有控制器对象所需的对象引用。但是从我在其他问题中读到的内容来看,这不太可能是一个好的解决方案,因为我会强制在类中存在一个特殊的构造函数。有时我读到反思通常是邪恶的,最好避免。
第二:我在控制器接口中添加了一个特殊的 init(a,b,c) 方法,需要在创建对象后直接调用该方法。这将强制对对象进行一系列调用(首先是 init(..),然后是 rest)以使其工作,这也可能很糟糕。顺便说一句,init() 方法在接口中通常是一件坏事吗?
第三:阅读this 评论后,我想到了以下内容:我没有使用实现控制器接口的类的类名(在 xml 文件中),而是使用类名属于具体控制器类的工厂。这个工厂将使用方法 createController(a,b,c) 实现一个接口,然后工厂将知道它必须实例化哪个类以及调用哪个构造函数来传递其他引用(如数据对象)。这样做的缺点是额外的类只是为了实例化控制器类,一般来说可能会有一点开销。
您认为最好的方法是什么?或者你能想出比这三种方式更好的方法吗?
谢谢!
【问题讨论】:
-
我会首先考虑该 XML 文件是否真的是您想要做的。
-
嗯,不知何故我需要找出我有哪些控制器类。但是你可能是对的,我试图创建一种模块系统,我仍然是一个学习的学生,所以对世界来说可能不太像样:P
标签: java interface constructor initialization