我想知道下面的课程设计。 我有一个名为ObjectFactory的接口和一个实现它的类,它被称为ObjectFactoryImpl。 ObjectFactoryImpl类具有从包创建对象的所有方法,并且从该包创建新对象的实例,需要ObjectFactoryImpl实例。 ObjectFactoryImpl类也在内部使用属于它所在的包的所有类。这是一个好的或坏的设计?
答案 0 :(得分:2)
通常,隐藏界面背后的实现细节是一种很好的做法,因此您处于"右侧"办法。
但是要保持一致。尽量避免直接使用您的实现。您应该始终牢记,您可能希望在不更改代码的情况下将其替换为其他代码(超出工厂范围)。
另一个评论是关于以Impl
结尾的名称。虽然我个人在生活中多次使用这些名字,但他们说后缀Impl
没有意义。嗯,这是实施,那又怎样?尝试为您的课程提供可自行解释的名称。例如SimpleObjectFactory
,ConfigurableObjectFactory
,XmlObjectFactory
等。
答案 1 :(得分:1)
使用界面是一种很好的做法,以便将来扩展您的代码。如果您已创建ObjectFactory
,我会使用它,而不是ObjectFactoryImpl
。也许将来你会有另一种你更喜欢使用的实现。
我有时会做的另一个选择是定义一个具体的类ObjectFactory
并使用它。如果我需要为工厂添加另一个实现,我将ObjectFactory
的名称更改为ObjectFactoryImpl
并添加另一个实现。这样您就不需要进行大量的代码更改,因为使用此类/接口的大多数地方保持不变。