首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个类只有5个实例

一个类只有5个实例
EN

Stack Overflow用户
提问于 2010-07-02 17:02:53
回答 11查看 8.1K关注 0票数 4

我希望在整个应用程序生命周期中只有5个类的实例。我如何才能做到这一点?请提供示例代码,如果可能的话。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-07-02 17:18:47

因为单例需要使用枚举(参见"Effective Java"):

代码语言:javascript
复制
public enum FiveInstance {

  INSTANCE1, INSTANCE2, INSTANCE3, INSTANCE4, INSTANCE5;

  public void anyMethod() {}

}

Greetz GHad

票数 12
EN

Stack Overflow用户

发布于 2010-07-02 17:11:50

工厂模式可以成为您的朋友。一个示例(虚构的,而不是threadsafe,因此非常简单)来说明这种方法:

代码语言:javascript
复制
public static MartiniFactory {

   private static int olives = 100;  // you asked for '5' but 100 is more realistic
                                     // for this example.

   public static Drink createMartini() throws OutOfOlivesException {
     if (olives > 0) {
       olives--;
       return new Martini(new Gin(4), new Vermouth(1), new Olive());
     else {
       throw new OutOfOlivesException();
     }
   }

   // forgot to mention, only the factory (=bar) is able to create Martinis, so:
   private class Martini {
      Martini(Ingredient... ingredients) {
        // ...
      }
      // ....
   }

}

编辑

许可示例不太好-所以我将它移到了一个域中,该域期望由工厂创建的对象不会在没有注意到工厂的情况下被返回和销毁。酒吧不能创造马提尼时,没有剩下的橄榄,它肯定不想要饮料后,喝了;-)

编辑2,可以肯定的是,只有工厂可以创建实例(=Drinks)。(不能保证,添加的内部私有类满足此要求,手头没有IDE来进行快速测试。请随时评论或编辑)

票数 6
EN

Stack Overflow用户

发布于 2010-07-02 17:11:12

代码语言:javascript
复制
class Sample
{
   private static int i = 0;

   private Sample()
   {
   } 

  public static Sample CreateInstance()
   {
      if(i <5)
      {
          i++;
          return new Sample();
      } 

      else
        throw new Exception("Can not create more then 5 instance of this class");  
   }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3164379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档