单例类只能有一个实例

单例类必须自己创建自己的唯一实例

单例类必须提供给所有其他对象这个实例

单例类有私有的构造方法和本身的一个静态实例对象

单例类向外界提供一个可访问的静态方法,供外界获取它的静态实例。

目的:保证一个类有且仅返回这一个实例对象。

Public class SingleObject {Private static SingleObject instance = new SingleObject()Private SingleObject() {}
Private static SingleObject getInstance() {Return instance;
}
Public void showMsg() {System.out.println(“show message”);
}
}

解决:一个全局使用的类频繁地创建和销毁。

构造方法是私有的决定了外界无法调用构造方法创建实例,必须通过单例类提供的静态方法获取唯一的类静态实例。

单例模式的几种实现方式:

1.    懒汉式,线程不安全

Lazy初始化:是

多线程安全:否

严格来说不算单例模式。

Public static getInstance() {
if(instance == null) {instance = new SingleObject();
}
Return instance;
}

2.    懒汉式,线程安全

Lazy初始化:是

线程安全:是

优点:第一次调用才生成实例,避免浪费内容

缺点:必须加锁synchronized才能保证单例,加锁会影响效率

Public class SingleObject {Private static SingleObject instance;Private SingleObject() {}Public static synchronized SingleObject getInstance() {If(instance == null) {Instance = new SingleObject();
}
Return instance;
}
}

3.   饿汉式

Lazy初始化 否

线程安全 是

优点 没有加锁,提高效率

缺点 类加载时就生成实例,浪费内容

实质 基于classloder机制避免了多线程同步问题,产生类装载的情况不少,但大多是调用单例的getInstance方法,也存在其他例如调用其他静态方法的情况,这种情况下显然没达到lazyload的效果

Public class SingleObject {Private static SingleObject instance = new SingleObject()Private SingleObject() {}
Private static SingleObject getInstance() {Return instance;
}
Public void showMsg() {System.out.println(“show message”);
}
}

4.    双检锁

Lazy 初始化是

线程安全 是

锁代码块的好处,提高效率,过滤掉已经存在实例的对象

也不能锁this Synchronized(this), 因为静态方法在类加载时就产生,类对象还没生成。

Synchronized(SingleObject.class) = static synchronized void getInstance(){}Public class SingleObject {Private volatile static SingleObject instance = new SingleObject();Private SingleObject() {}Private static SingleObject getInstance() {if(instance == null) {synchronized (SingleObject.class) {if(instance == null) {instance = new SingleObject();
}
Return instance;
}
}
}
}

5.    登记式、静态内部类

Lazy初始化 是

线程安全 是

[设计模式笔记]3.单例模式相关推荐

  1. 【设计模式笔记】单例模式Singleton Pattern

    单例模式是比较简单的一个模式,项目中也经常用得到. 实现细节 将类的构造方法设置为私有的(private),通过个公有的(public)的方法来获取类的实例. 代码示例 public class Si ...

  2. Java读书笔记(8)-单例模式

    Java读书笔记(8)-单例模式 今天在阅读<Effective Java 2>第3条时,获知一种使用枚举enum实现单例模式的新方法,然而书上并没有就此展开深入说明,于是上网查阅了一些资 ...

  3. Java设计模式笔记——七个结构型模式

    系列文章目录 第一章 Java设计模式笔记--七大设计原则 第二章 Java设计模式笔记--六个创建型模式 文章目录 系列文章目录 一.适配器模式 1.概念 2.类适配器 3.对象适配 4.缺省适配器 ...

  4. 软件设计师——设计模式笔记上

    软件设计师--设计模式笔记上(创造型5种) 设计模式的主要目的 设计模式的原则 1.工厂方法模式(类模式) 意图 适用性 代码实现 2.抽象工厂模式(对象模式) 意图 适用性 代码实现 3.生成器模式 ...

  5. 设计模式之一:单例模式

    设计模式之一:单例模式 目录介绍 1.单例模式介绍 2.单例模式定义 3.单例模式使用场景 4.单例模式的实现方式 4.1 懒汉式[线程不安全] 4.2 懒汉式[**synchronized 线程安全 ...

  6. golang atomic load 性能_设计模式之Golang单例模式

    今天给大家讲下什么是单例模式,以及在Go语言中如何用正确的姿势实现它.其实单例模式是一种在平时开发中经常用到的软件设计模式.在设计模式结构中,其核心是只包含一个被称为单例的特殊类.通过单例模式可以确保 ...

  7. 单例设计模式 序列化破坏单例模式原理解析及解决方案?

    单例设计模式 序列化破坏单例模式原理解析及解决方案? 序列化和反序列化 反射的破坏

  8. Java设计模式中的单例模式

    有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式.设计单例模式主要采用了Java的pri ...

  9. 设计模式笔记——代理模式

    设计模式笔记--代理模式 代理模式介绍 代理模式通常是介于请求方和提供方的一个中介系统,请求方是发送请求的一方,提供方是根据请求提供相应资源的一方 Web中的代理服务器就是一个例子,客户端向代理服务器 ...

最新文章

  1. mysql 给min值取别名_mysql基本命令
  2. Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs
  3. 在RHEL5下构建基于系统用户的Postfix邮件系统
  4. 线程中start()与run()的区别
  5. pandas 按字符串肚脐眼 读取数据_十分钟学习pandas! pandas常用操作总结!
  6. boost::fibers::fiber用法的测试程序
  7. Android eMMC 分区详解(转载)
  8. Libevent源码分析-----配置event_base
  9. MPEG文件中什么是GOP
  10. 实现深拷贝的常用方法
  11. 三星s9Android9内测申请链接,国行三星S9/S9+开启安卓9.0内测
  12. 利用html简单自我介绍案例
  13. 射影几何----齐次坐标下的三点共线和非齐次坐标下的三点共线是等价的
  14. 【复杂网络】网络科学导论学习笔记-第五章节点重要性与相似性
  15. Javaweb中上传图片,获取路径
  16. 义隆单片机学习笔记之(二) 指令系统
  17. 给Rstudio修改背景和字体等设置教程
  18. 实用电路:用MOS管模拟的可调功率电阻
  19. Codeforces1696 C. Fishingprince Plays With Array
  20. 魔兽mdx文件导出为Ogre Mesh的小进展

热门文章

  1. 纸板箱机器人制作比例图纸_造一个黄油机器人(Butter Robot)
  2. Coloring Dominoes
  3. 学计算机广东2B大学,2017年广东2B大学最新排名情况
  4. 台达伺服控制器接线图_台达驱控一体三轴伺服驱动器ASDA-M-R系列无骨线圈绕线机解决方案...
  5. getValue()方法 java_java.util.zip.CRC32.getValue()方法示例
  6. 大工19春《计算机原理》在线作业2,大工19春《计算机原理》在线作业2.pdf
  7. java编写创建数据库和表的程序
  8. Codeforces Round #377 (Div. 2) 732A B C D E F
  9. val, lazy, def
  10. 2015-4-20 BAV推广页面修改前后对比-安全网购