一)故事
二)定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
三)代码例子
共计两个类组成:1)普通类;2)单例类;
1)普通类
2)单例类
单例模式(通过synchronized实现单例)
单例模式(通过Object对象锁实现单例)
场景使用例子
四)优点(未完成)
1)由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建,销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显了。
2)由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决。
3)
4)
五)缺点(未完成)
1)
2)
3)
六)使用场景(未完成)
1)
2)
3)
4)
七)注意事项
八)扩展(未完成)
多例模式
九)总结
二)定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
三)代码例子
共计两个类组成:1)普通类;2)单例类;
1)普通类
/**
* 普通类
*
* @author levovo
*/
public class A {
public A() {
System.out.println("A()->A()");
}
public void method1() {
System.out.println("A()->method2()");
}
public void method2() {
System.out.println("A()->method2()");
}
}
2)单例类
单例模式(通过synchronized实现单例)
/**
* 单例模式(通过synchronized实现单例)
*
* @author levovo
*
*/
public class ASingle {
// 单例模式对象
private static A mInstance = null;
// 要加这个,修饰为private
private ASingle() {
}
/**
* 得到单例实例
*
* @return
*/
public synchronized static A getInstance() {
if (mInstance == null) {
mInstance = new A();
}
return mInstance;
}
}
单例模式(通过Object对象锁实现单例)
/**
* 单例模式(通过Object对象锁实现单例)
*
* @author levovo
*
*/
public class BSingle {
// 对象锁
private static Object mObject = new Object();
// 单例模式对象
private static A mInstance = null;
// 要加这个,修饰为private
private BSingle() {
}
/**
* 单例模式
*
* @return
*/
public static A getInstance() {
synchronized (mObject) {
if (mInstance == null) {
mInstance = new A();
}
}
return mInstance;
}
}
场景使用例子
/**
* 场景使用例子
*
* @author levovo
*/
public class Client {
public static void main(String[] args) {
// 单例模式(通过synchronized实现单例)
ASingle.getInstance().method1();
ASingle.getInstance().method2();
// 单例模式(通过Object对象锁实现单例)
BSingle.getInstance().method1();
BSingle.getInstance().method2();
}
}
四)优点(未完成)
1)由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建,销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显了。
2)由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决。
3)
4)
五)缺点(未完成)
1)
2)
3)
六)使用场景(未完成)
1)
2)
3)
4)
七)注意事项
八)扩展(未完成)
多例模式
九)总结