设计模式(1)-单例设计模式
2018-02-26 13:22
169 查看
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己。
本篇文章同步微信公众号
欢迎大家关注我的微信公众号:「醉翁猫咪」
今天我们讲讲什么是单例设计模式,单例设计模式,(singleton):单例设计模式是最简单的设计模式,面试常考
单例设计模式
就是在某一个类中,在整个应用中,有且只有一个实例(对象),即是一个类中只有一个对象实例。在一般的开发中工具性地类,设计是为单例的。对于单例设计模式有N种写法。
单例模式一般写法:
优点:在单例设计模式中内存只有一个实例,减少了内存空间,特别是避免了一个对象需要频繁地创建,销毁对象,可以提高性能,单例设计模式只生成一个实例,大大提高了系统的性能,单例设计模式可以避免对资源的多重占用,比如我们在写一个文件操作,由于只有一个实例存在,避免了对同一个资源文件的同时操作。单例设计模式可以全局访问,设计一个单例类,负责所有的数据表映射处理。
缺点:对于单例设计模式的缺点,单例设计模式很容易导致程序内存泄漏,单例设计模式一般没有接口,扩展困难,若要进行扩展,只有修改代码。
单例设计模式
步骤: 1):私有化构造器; 2):自身事先提供好一个对象(private static final); 3):向外暴露一个公共的静态方法,用于返回该对象。
单例设计模式的饿汉单例写法
private static Singleton instance;
private Singleton (){
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}饿汉式在类创建时就实例一个静态的对象交给自己使用,所以线程是安全的,但由于每次调用getInstance方法时都要进行同步,这是我们大部分不需要的操作。
DCL形式
DCL这种写法对singleton进行了两次判空,如代码所示,第一次判断是为了不必要的同步,第二次是是否创建实例,在DCL形式中资源利用率高。
总结:
单例模式有很多种,但其原理就是将构造函数进行私有化,通过静态公有方法获取唯一实例。
如果觉得不错,可以分享哦,你的鼓励是我最大的进步!
从入门到熟悉!坚决不放弃!
本篇文章同步微信公众号
欢迎大家关注我的微信公众号:「醉翁猫咪」
今天我们讲讲什么是单例设计模式,单例设计模式,(singleton):单例设计模式是最简单的设计模式,面试常考
单例设计模式
就是在某一个类中,在整个应用中,有且只有一个实例(对象),即是一个类中只有一个对象实例。在一般的开发中工具性地类,设计是为单例的。对于单例设计模式有N种写法。
单例模式一般写法:
public class Singleton{ private static final Singleton instance = new Singleton(); //指向自己实例的私有静态引用 //私有的构造方法 private Singleton(){ } public static Singleton getInstance(){ //以自己为实例,返回值 return instance; } }单例设计模式的优缺点:
优点:在单例设计模式中内存只有一个实例,减少了内存空间,特别是避免了一个对象需要频繁地创建,销毁对象,可以提高性能,单例设计模式只生成一个实例,大大提高了系统的性能,单例设计模式可以避免对资源的多重占用,比如我们在写一个文件操作,由于只有一个实例存在,避免了对同一个资源文件的同时操作。单例设计模式可以全局访问,设计一个单例类,负责所有的数据表映射处理。
缺点:对于单例设计模式的缺点,单例设计模式很容易导致程序内存泄漏,单例设计模式一般没有接口,扩展困难,若要进行扩展,只有修改代码。
单例设计模式
public class Singleton{ private singleton(){} private static final Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } public void sort(int[] arr){ TODO } public int binarySearch(int[] arr,int key){ TODO } }单例设计模式的特点:
步骤: 1):私有化构造器; 2):自身事先提供好一个对象(private static final); 3):向外暴露一个公共的静态方法,用于返回该对象。
单例设计模式的饿汉单例写法
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){ } public static Singleton getInstance() { return instance; } }单例设计模式的懒汉单例写法public class Singleton {
private static Singleton instance;
private Singleton (){
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}饿汉式在类创建时就实例一个静态的对象交给自己使用,所以线程是安全的,但由于每次调用getInstance方法时都要进行同步,这是我们大部分不需要的操作。
DCL形式
public class Singleton { private volatile static Singleton singleton; private Singleton (){ //TODO } public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
DCL这种写法对singleton进行了两次判空,如代码所示,第一次判断是为了不必要的同步,第二次是是否创建实例,在DCL形式中资源利用率高。
总结:
单例模式有很多种,但其原理就是将构造函数进行私有化,通过静态公有方法获取唯一实例。
如果觉得不错,可以分享哦,你的鼓励是我最大的进步!
从入门到熟悉!坚决不放弃!
相关文章推荐
- 设计模式的六大原则 - 精通设计模式
- 设计模式(二十三)------23种设计模式(15):备忘录模式
- 《设计模式》学习笔记——设计模式怎样解决设计问题
- 设计模式有什么用——设计模式之初
- 四巨头GoF的《设计模式》中23种设计模式的UML图 - 3 of 4
- 设计模式值六大原则——设计模式之六大原则——单一职责原则(SRP)
- 设计模式(二十)之设计模式之 Interpreter(解释器)
- 《设计模式》学习笔记--什么是设计模式
- 四巨头GoF的《设计模式》中23种设计模式的UML图 - 4 of 4
- 《设计模式》读书笔记——设计模式相关
- 设计模式系列1-为什么要用设计模式
- 设计模式视频教程——【从设计到模式】
- 设计模式(一)-设计模式的分类
- 设计模式(9)--设计模式
- 设计模式(四)------设计模式六大原则(3):依赖倒置原则
- 设计模式视频教程——【从设计到模式】
- 设计模式(三)23种设计模式
- 设计模式(1):单例设计模式
- 设计模式14—Flyweight设计模式
- 《设计模式》一书中的23种设计模式