快速Java问题:仅从另一个实例化给定的类?
-
03-07-2019 - |
题
我的问题是:我需要一种方法来确保只有一个给定的类可以实例化另一个。我不想让另一个成为嵌套的内部类或类似的东西。我该怎么做呢?我忘记了。
解决方案
使构造函数成为私有的。创建一个静态工厂方法,该方法接受允许访问的类的实例。让工厂方法创建一个合适的对象,并在允许访问创建的对象的对象上使用settor,为该类提供创建的副本。
public class AllowedAccess
{
private SecureClass secure;
public setSecureClass( SecureClass secure )
{
this.secure = secure;
}
...
}
public class SecureClass
{
private SecureClass() {}
public static void Create( AllowedAccess allowed )
{
allowed.setSecureClass( new SecureClass() );
}
...
}
顺便说一句,我对这个设计很怀疑。似乎与我的关系太高了。 其他提示
私有静态内部类正是您想要的。没有什么愚蠢的。
public class Creator {
private static class Created {
}
}
否则,您只能保护包级别的实例化。
public class Created {
Created() {
}
}
只允许来自同一个包的类访问构造函数。
您可以使要保护的类不受实例化包的影响。
我同意tvanfosson的回答以及他关于过高耦合的评论。为什么不通过采用 Inversion of Control 框架来保留对课程创建过程的更多控制权例如 Spring 或 Guice ?
恕我直言创建带有“新”类的课程陈述被认为有点......过时,工厂应该是首选,IoC框架甚至更多。
此致
不隶属于 StackOverflow