【发布时间】:2012-05-21 07:36:15
【问题描述】:
我已经定义了一个我的系统将依赖的接口:
IMethodCall
我创建了一堆实现IMethodCall的类:
AbstractMethodCall
ConstructorCall
TargetConstructorCall
VoidMethodCall
TargetVoidMethodCall
NonVoidMethodCall
TargetNonVoidMethodCall
它们是实现的细节,我的系统不知道(或者至少不需要知道)。
根据我当时手头的一组数据选择要实例化的实现背后有一些棘手的逻辑,所以我决定创建一个工厂来将所有逻辑分组在一个地方:
MethodCallFactory
我试图了解这里使用的包结构应该是什么。我最初的想法是将所有具体的类放在一个methodCalls 包中,并将它们设置为受包保护,这样没人会知道它们的存在。然后我会让IMethodCall 和MethodCallFactory 在外面,这样我系统的用户就可以使用它们。问题是,如果我将具体类作为包保护,那么工厂也必须在它们的包中,这反过来看起来有点奇怪,因为对于外部查看者来说,它看起来像是一个只存在包含的包工厂。
目前我认为最好的权衡是将具体类公开,但我想知道你们通常如何处理这种情况?
【问题讨论】:
-
公开它们有什么害处吗?
-
公开它们的危害在于它们可以直接访问,这显然是作者想要防止的,因为使用工厂的本质。