单子模式保证一个application中就至多只有一个instance, 注意这里界定的是一个application, 而不是一个System.如果不是一个application的话,就不能够保证了。例如:在分布式环境下,虽然单服务器端实现了Singleton,但是多服务器端(System)就有可能不能保证是Singelton。
保证application中实现该模式的Singleton 类至多只有一个instance, 可以在一定范围内更好地确定业务逻辑, 尤其是那些保证现实生活中application中只有一个的概念。如 数据库连接池就是一个典型;
Singleton设计模式并不能保证节省资源,这是一点需要澄清的。如果要节省资源,大可不必使用Singleton设计模式,Singleton的设计目标并不是为了节省资源,而且为了保证全局性的逻辑统一;
Singleton设计模式与其他设计模式(如 Factory设计模式)的联合使用基本上已经成为了一种“普遍”的技巧,对Singleton的熟悉可以帮助我们在理解他人工作上和相互交流上带来方便。
package cn.by.DesignModel.Singleton;
/**
* 饿汉式
*
*/
public class SingleMod2 {
//类加载时就建立一个该类对象,也是唯一的一个
private static SingleMod2 single = new SingleMod2();
//防止别人通过new关键字建立该类对象,所以声明为private
private SingleMod2() {}
/**
* 得到一个该类对象
* synchronized 为多线程同步互斥访问
* @return 对象引用
*/
public synchronized static SingleMod2 getInstance() {
return single;
}
package cn.by.DesignModel.Singleton;
/**
* 懒汉式
*
*/
public class SingleMod {
//因为要返回一个唯一的该类对象,所以定义为静态的
private static SingleMod single;
//私有初始化,防止别人通过new产生一个该类对象
private SingleMod() {}
/**
* 获取该类的对象(唯一)
* synchronized 是多线程同步访问的互斥
* @return 返回对象引用
*/
public synchronized static SingleMod getInstance() {
//为空产生才产生一个该类对象
if(single == null)
single = new SingleMod();
return single;
}
}
}