服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

谈模式(singletonpattern)的变形


  下面是singleton pattern的原意
  package pattern.creational.singleton.demo1;
  
  /**
   *

title: the singleton pattern


   *
   *

description: 建议使用这个方法
   * another approach, suggested by design patterns, is to create
   * singletons using a static method to issue and keep track of instances. to
   * prevent instantiating the class more than once, we make the constructor
   * private so an instance can only be created from within the static method
   * of the class.
   *
   * other consequences of the singleton pattern
   * 1. it can be difficult to subclass a singleton, since this can only work
   * if the base singleton class has not yet been instantiated.
   * 2. you can easily change a singleton to allow a small number of instances
   * where this is allowable and meaningful.
   *
   *


   *
   *

copyright: copyright (c) 2005


   *
   *

company:


   *
   * @author lin.xiang.xiang
   * @version 1.0
   */
  public class isspooler
  {
  //this is a prototype for a printer-spooler class
  //such that only one instance can ever exist
   static boolean instance_flag = false; //true if 1 instance
  //the constructor is privatized-
  //but need not have any content
   private isspooler() {}
  
  //static instance method returns one instance or null
   static public isspooler instance() {
    if (!instance_flag) {
     instance_flag = true;
     return new isspooler(); //only callable from within
    }
    else
     return null; //return no further instances
   }
  
  //-------------------------------------------
   public void finalize() {
    instance_flag = false;
   }
  
   public static void main(string[] args) {
   }
  }
  
  
  
  只要稍加修改,我们可控制只创建n个实例,n由我们来定.
  下面给出代码示范
  
   package pattern.creational.singleton.demo2;
  
  /**
   *

title: singleton pattern 的变形


   *
   *

description:


   *
   *

copyright: copyright (c) 2005


   *
   *

company:


   *
   * @author lin.xiang.xiang
   * @version 1.0
   */
  public class n_instance {
   final static int maxinstance = 5; //最多只能创建5个实例
   static int instancecount = 0; //开始无实例
  
   private n_instance() {}
  
   static public n_instance getinstance() {
    if (instancecount < maxinstance) {
     instancecount++;
     return new n_instance(); //返回一个实例
    }
    else
     return null; //返回空
   }
  
   public void finalize() {
    instancecount--;
   }
  }

扫描关注微信公众号