【发布时间】:2009-01-02 01:37:36
【问题描述】:
因此,我的问题是:我需要一种方法来确保只有一个给定的类可以实例化另一个。我不想让另一个嵌套的内部类或类似的东西。我该怎么做呢?我一下子忘记了。
【问题讨论】:
标签: java class instantiation
因此,我的问题是:我需要一种方法来确保只有一个给定的类可以实例化另一个。我不想让另一个嵌套的内部类或类似的东西。我该怎么做呢?我一下子忘记了。
【问题讨论】:
标签: java class instantiation
私有静态内部类正是您想要的。没什么好说的。
public class Creator {
private static class Created {
}
}
否则只能在包级别保护实例化。
public class Created {
Created() {
}
}
只允许来自同一个包的类访问构造函数。
【讨论】:
将构造函数设为私有。创建一个静态工厂方法,该方法采用允许访问的类的实例。让工厂方法创建一个合适的对象,并在允许访问创建的对象的对象上使用设置器,为该类提供创建的副本。
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() );
}
...
}
顺便说一句,我对这种设计持怀疑态度。对我来说似乎耦合度太高了。
【讨论】:
您可以将要防止实例化包保护的类设为私有。
【讨论】:
我同意 tvanfosson 的回答,也同意他关于耦合太高的评论。为什么不通过采用Spring 或Guice 等Inversion of Control 框架来保留对类创建过程的更多控制?
恕我直言,使用“new”语句创建类被认为有点......过时了,工厂将是首选,IoC 框架甚至更多。
问候
【讨论】: