【发布时间】:2019-09-24 21:53:57
【问题描述】:
将类的实例化限制为仅一个类的最佳做法是什么?类似于 this 的东西,但在 Java 中。
假设有 Main 类,然后有 User、Admin、View、Data、Client 等类。只有“主”类应该能够实例化所有其他类。
所以如果'User'需要在'Data'类中调用'getUser'方法,它不能实例化'Data'类和调用方法,但它必须调用'Main'类,然后'Main'会实例化“Data”类并将参数传递给它的“getUser”方法。
我在想的是使用私有构造函数、工厂模式等,但不确定这是否会产生我需要的结果。由于复杂性,我认为内部类不是一个好的解决方案。
对此有何建议?
【问题讨论】:
-
你想要保证类永远不会被除 Main 之外的类实例化,还是这更像是一种不污染命名空间的实践?如果是第二种,您可以将 Main 包以外的类的构造函数设为私有,并确保它们都在自己的包中?
-
这就是 Java 包的用途。您可以将事情设为包私有(当您不说公开时,这实际上是默认设置),然后其他包中的代码无法访问它。这样,您可以将构造函数(甚至整个类)隐藏在用户代码中,并保留在您自己的实现内部。
-
我看不出想要这样做的充分理由。这似乎是一种很好的方法,可以实现很多复杂性,但没有太多好处(而且可能有相当多的损害)。
-
@adickinson 是的,我想保证这些类永远不会被 Main 以外的类实例化。是的,我可以使类的构造函数是私有的,并且所有类都在单独的包中。
-
保护所有构造函数,并提供一个工厂公共方法
标签: java