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