参考:《设计模式之禅》
定义:确保某一个类只有一个实例(因为使用private的构造方法),而且自行实例化并向整个系统提供这个实例。
通用代码模块:
public class Singleton{
private static final Singleton singleton = new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton();
}
//其他方法尽量是static方法
public static void doSomething(){
}
}
扩展(上限的多例模式 ):
以皇帝不能为两个为例
public class Emperor {
//定义最多有多少皇帝
private static int maxNumOfEmperor = 2;
private static ArrayList<String> nameList = new ArrayList<String>();
private static ArrayList<Emperor> emperorList = new ArrayList<Emperor>();
//每个皇帝的序号
private static int countNumOfEmperor = 0;
//产生所有对象
static{
for(int i=0 ; i<maxNumOfEmperor ; i++){
emperorList.add(new Emperor("皇" + (i+1) + "帝"));
}
}
private Emperor(){
}
//只能建立一个对象,private
private Emperor(String name){
nameList.add(name);
}
private static Emperor getInstance(){
Random r = new Random();
countNumOfEmperor = r.nextInt(maxNumOfEmperor);
return emperorList.get(countNumOfEmperor);
}
//公有方法
public static void say(){
System.out.println(nameList.get(countNumOfEmperor));
}
}
单例模式的优点:1.单例模式在内存中只有一个实例,减少内存开支,一个对象需要频繁的创建和销毁,且创建或销毁无法优化的时候,单例模式优势明显。
2.减少系统性能开销。
3.避免对资源的多重占用。
4.设置系统的全局访问点。
缺点:1.没有借口访问困难。
2.测试困难。
3.与单一职责原则冲突。