谈模式(Singleton Pattern)的变形

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

下面是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

instanceCount++;

return new N_Instance(); //返回一个实例

}

else

return null; //返回空

}

public void finalize() {

instanceCount--;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航