工做已经一年之久,不少时间心思大多都花在需求的完成上,需求的完成度很高,可是设计呢?数据库
有没有考虑过你所实现的代码是否有设计在其中呢?设计模式
若是没有的话接下来和我一块儿学习设计模式哈~(不必定学习了设计模式就能提升你的设计,可是总归会有帮助)安全
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、通过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。多线程
按目的分类:工具
按范围分类:(模式主要是用于处理类之间关系仍是处理对象之间的关系)学习
确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例模式是一种对象建立型模式。网站
从他的定义咱们能够看到有三个特色:spa
建立对象再也不经过new 而经过 getInstance 让该类自行建立。线程
给你们介绍几种可用的单例模式的实现:设计
/**
* 饿汉式(静态常量)
*/
class Singleton {
private static final Singleton Instance = new Singleton();
static Singleton getInstance() {
return Instance;
}
private Singleton() {
}
}
复制代码
优势:简单,使用时没有延迟;在类装载时就完成实例化,天生的线程安全
缺点:没有懒加载,启动较慢;若是从始至终都没使用过这个实例,则会形成内存的浪费。
/**
* 饿汉式(静态代码块)
*/
class Singleton {
private static Singleton Instance;
static {
Instance = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return Instance;
}
}
复制代码
这种是将类实例化的过程放在了静态代码块中,在类装载的时执行静态代码块中的代码,初始化类的实例。
优缺点同上。
/**
* 双重检查(DCL)
*/
public class Singleton {
private static volatile Singleton Instance;
private King() {
}
public static Singleton getKingInstance() {
if (Instance == null) {
synchronized (Singleton.class) {
if (Instance == null){
Instance = new Singleton();
}
}
}
return Instance;
}
}
复制代码
优势:线程安全;延迟加载;效率较高。
缺点:JDK < 1.5 的时候不可用
如今你们基本都是jdk1.8,因此也不存在这个问题。那为何不可用呢?你们能够学习一下哈
咱们学习了怎么实现,那何时咱们须要采用单例模式呢?
单例模式只容许建立一个对象,所以节省内存,加快对象访问速度,所以对象须要被公用的场合适合使用,如多个模块使用同一个数据源链接对象等等。好比:
给你们介绍下具体的使用场景:
这是几个比较经常使用的,你们能够参考这些想一下在本身的项目中是否采用了单例模式呢?又或者哪里也可使用单例模式呢?
其实单例模式的实现还有其余的实现方式,好比线程安全等等的,可是根据各方面,效率等因素,不推荐使用。
因此我在这里就只总结几个推荐你们使用的单例模式的实现。但愿对你们有用。