站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题谈模式(Singleton Pattern)的变形

谈模式(Singleton Pattern)的变形

摘要: 谈模式(Singleton Pattern)的变形
内容: 下面是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--;
}
}

欢迎交流,指点
QQ:47004223
Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
↑返回目录
前一篇: 符合oo惯例的表现层控制
后一篇: 测试要考虑成本、粒度 和角度问题