文档地址:《设计模式之禅》
第七章:单例模式( Singleton Pattern)
切入故事:唯一的皇帝
定义: Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例, 而且自行实例化并向整个系统提供这个实例。 )
通用类图:
优点:
1:减少了内存开支
2:减少系统的性能开销
3:避免对资源的多重占用
4:可以在系统设置全局的访问点, 优化和共享资源访问
缺点:
1:没有接口,扩展困难,因为要求“自行实例化”。
2:不利于测试。
3:单例模式与单一职责原则有冲突。因为 单例模式把“要单例”和业务逻辑融合在一个类中
使用场景:
1:要求生成唯一序列号的环境;
2:需要一个共享访问点或共享数据;
3:创建一个对象需要消耗的资源过多;
4:需要定义大量的静态常量和静态方法(如工具类)
扩展:指定实例
demo:
饿汉模式:
public Single (){
private static Single s=new Single();
private Single(){}
public static Single getSingle (){
return s;
}
}
懒汉模式:
public class Single {
private static Single s = null;
public Single() {}
//同步函数的demo
public static synchronized Single getInstance() {
if (s == null){
s = new Single1();
}
return s;
}
//同步代码快的demo加锁,安全高效
public static Single getInStanceBlock(){
if(s==null){
synchronized (Single1.class) {
if(s==null){
s = new Single1();
}
}
}
return s;
}
}
个人总结:设计模式,要求程序运行时候,不管是什么情况,只允许出现同一个对象。且需要保证,构造方法为空,不能通过new的方法来生成一个对象。