java中23种设计模式之4-单例模式(singleton pattern)

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

 

单例类只能有一个实例。

单例类必须自己创建自己的唯一实例。

单例类必须给所有其他对象提供这一实例。

 

一般是通过private 来描述构造函数,禁止从外部构造对象,通过getInstance来获取唯一的实例。

 

class Singleton
{
private static Singleton aSingleton=null;
private static int indexSingleton=0;
private Singleton()
{
indexSingleton++;
}
public static Singleton getInstance()
{
if(aSingleton==null)
aSingleton=new Singleton();
return aSingleton;
}
public void printInfo()
{
System.out.println("singleton index:"+indexSingleton);
}
}

public class SingletonPatternTest
{
public static void main(String[] args)
{
Singleton aSingleton=Singleton.getInstance();
aSingleton.printInfo();
Singleton bSingleton=Singleton.getInstance();
bSingleton.printInfo();
}
}

//////////////////////////////////

输出结果:

singleton index:1
singleton index:1

 

单例模式还可以引申为多例模式:

顾名思义,多例模式相对于单例模式,就是可以有多于一个的有限实例,如下列,只能有两个实例。

 

import java.util.ArrayList;
import java.util.Random;
class Multition
{
private final static int MAX_NUMBER=2;
private static ArrayList<Multition> aMultitionArrayList=new ArrayList<Multition>();
private static int index=0;
private String CurrentMultitionInfo;
static
{
for(int i=0;i<MAX_NUMBER;i++)
{
index=i;
aMultitionArrayList.add(new Multition());
}
}
private Multition()
{
CurrentMultitionInfo="the current object is "+index;
}
public static Multition getInstance()
{
Random aRandom=new Random();
index=aRandom.nextInt(MAX_NUMBER);
return aMultitionArrayList.get(index);
}
public void printMultitionInfo()
{
System.out.println(CurrentMultitionInfo);
}
}

public class MultitionPatternTest
{
public static void main(String[] args)
{
Multition aMultiton=null;
for(int i=0;i<10;i++)
{
aMultiton=Multition.getInstance();
aMultiton.printMultitionInfo();
}
}
}

///////////////////////////////

输出结果:

the current object is 1
the current object is 1
the current object is 0
the current object is 1
the current object is 0
the current object is 0
the current object is 0
the current object is 0
the current object is 1
the current object is 0

posted on 2015-03-30 19:46  wudymand  阅读(118)  评论(0编辑  收藏  举报

导航