单例设计模式

设计模式是什么

对问题行之有效的解决方式,其实他是一种思想

单例设计模式

解决的问题,就是可以保证,一个类在内存中的对象唯一性
例如:必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性

如何保证对象唯一性

  1. 不允许其他程序用new创建该类对象
  2. 在该类创建一个本类实例
  3. 对外提供一个方法让其他程序可以获取该对象
步骤
  1. 私有化该类的构造函数(不能在别的类初始化就不能new该类对象)
  2. 通过new在本类中创建一个本类对象
  3. 定义一个公有的方法,将创建的对象返回

饿汉式

class Single{
private static final Single s = new Single();
private Single(){
}
public static Single getInstance(){
return s;
}
}

懒汉式

class Single2{
private static Single2 s = null;
private Single(){}
public static Single2 getInstance(){
if(s == null)
s = new Single();
return s;
}
}

这两种的区别
第一种类加载已经存在了,第二中,类加载进来还没有对象,只有调用了getInstance方法时,才会创建对象
懒汉式会出现一些问题,被多线程访问时,不能保证对象的唯一性

class Single2{
private static Single2 s = null;
private Single(){}
public static  synchronized Single2 getInstance(){
if(s == null)
s = new Single();
return s;
}
}

这种用同步函数的方式效率低

class Single2{
private static Single2 s = null;
private Single(){}
public static Single2 getInstance(){
if(s == null)
{
synchronized(Single2.class)
{
if(s == null)
s = new Single();
}
return s;
}
}
}

用同步代码块的方式写,因为是静态函数没有this,所以用类名+class的方式给出对象,

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容