what
Ensure a class has only one instance, and provide a global point ofaccess to it.(确保某一个类只有一个实例, 而且自 行实例化并向整个系统提供这个实例。 )
why
单例模式在内存中只有一个实例, 减少了内存开支
单例模式可以避免对资源的多重占用
how
public class Singleton {
private static final Singleton singleton = new Singleton();
// 限制产生多个对象
private Singleton() {
}// 通过该方法获得实例对象
public static Singleton getSingleton() {
return singleton;
}// 类中其他方法, 尽量是static
public static void doSomething() {
}
}
extension
产生固定数量的实例
public class Emperor {
// 定义最多能产生的实例数量
private static int maxNumOfEmperor = 2;
// 每个皇帝都有名字, 使用一个ArrayList来容纳, 每个对象的私有属性
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 Emperor(String name) {
nameList.add(name);
}// 随机获得一个皇帝对象
public static Emperor getInstance() {
Random random = new Random();
// 随机拉出一个皇帝, 只要是个精神领袖就成
countNumOfEmperor = random.nextInt(maxNumOfEmperor);
return emperorList.get(countNumOfEmperor);
}// 皇帝发话了
public static void say() {
System.out.println(nameList.get(countNumOfEmperor));
}
}