单例模式属于创建型模式,它保证一个类只有一个实例,并提供唯一节点访问该实例。 单例模式主要解决一个全局使用的类被频繁地创建与销毁对象,浪费系统资源的问题。 使用单例模式时首先要判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 单例模式的构造函数是私有的。 单例模式是设计模式中使用很频繁的一种模式,在各种开源框架、应用系统中多有应用。 单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。 这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 如果你创建了一个对象,同时过一会儿后你决定再创建一个新对象,在单例模式下你会获得之前已创建的对象,而不是普通构造函数总是返回一个新对象。 没有接口 不能继承 违反了 单一职责原则* 单一职责原则:修改一个类的原因只能有一个。 单例模式禁止通过除特殊构建方法以外的任何方式来创建自身类的对象。 该方法可以创建一个新对象, 但如果该对象已经被创建, 则返回已有的对象。 单例模式与全局变量不同, 它保证类只存在一个实例。 除了单例类自己以外, 无法通过任何方式替换缓存的实例。 请注意, 你可以随时调整限制并设定生成单例实例的数量, 只需修改 获取实例方法, 即 getInstance 中的代码即可实现。 单例(Singleton)类声明了一个名为getInstance获取实例的静态方法来返回其所属类的一个相同实例。 单例的构造函数必须对客户端(Client)代码隐藏。调用获取实例方法必须是获取单例对象的唯一方式。 所有单例的实现都包含以下两个相同的步骤: 如果你的代码能够访问单例类, 那它就能调用单例类的静态方法。 无论何时调用该方法, 它总是会返回相同的对象。 单例模式是运用频率很高的模式。在客户端通常没有高并发的情况,选择哪种实现方式都不会有太大的影响。 但一般情况下,使用饿汉方式是不错的选择,只有在要明确实现 lazy loading 效果时,才会使用登记方式。如果涉及到反序列化创建对象时,可以尝试使用枚举方式。如果有其他特殊的需求,可以考虑使用双检锁方式。5分钟掌握设计模式之:单例模式
本文思维导图
什么是单例模式
简介
特点
优点
缺点
为什么要使用单例模式?
单例模式的应用场景
如何使用单例模式?
单例模式的结构
单例模式的实现特点
单例模式的几种实现方式
懒汉式,线程不安全
public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
懒汉式,线程安全
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
饿汉式
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }
双检锁/双重校验锁(DCL,double-checked locking)
public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
登记式/静态内部类
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
枚举
public enum Singleton { INSTANCE; public void whateverMethod() { } }
总结
实现单例模式主要关键点:
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算