我的问题是:我需要一种方法来确保只有一个给定的类可以实例化另一个。我不想让另一个成为嵌套的内部类或类似的东西。我该怎么做呢?我忘记了。

有帮助吗?

解决方案

使构造函数成为私有的。创建一个静态工厂方法,该方法接受允许访问的类的实例。让工厂方法创建一个合适的对象,并在允许访问创建的对象的对象上使用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框架甚至更多。

此致

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top