经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式之单例模式
来源:cnblogs  作者:SimpleWu  时间:2018/10/29 9:54:08  对本文有异议

设计模式之单例模式

作者:SimpleWu

为什么要使用单例模式?

? 古代的皇帝有且只能有一个,如果有多个皇帝会怎么样,那么就会出问题。所以有些对象有且只能有一个的,多了就会出问题,一山难容二虎。这个时候就有了我们的单例模式。

什么是单例模式?

在系统中,有些对象比如:配置文件,工具类,线程池,日志对象等。我们只需要一个就够了,多了就不便于管理。

有些对象,我们需要确保在一个程序中有且只能有一个,那么我们就需要单例模式。

单例模式分为两种:饿汉式,懒汉式

懒汉式

从线程安全性上讲,不加同步的懒汉式是线程不安全的,比如,有两个线程,一个是线程A,一个是线程B,它们同时调用getInstance方法,那就可能导致并发问题。

懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间。

  1. /**
  2. * 设计模式-单例模式-懒汉式
  3. * @作者:SimpleWu
  4. * 2018年10月26日 下午10:54:02
  5. */
  6. public class Lazy {
  7. //私有化构造函数,不允许程序员手动再new对象
  8. private Lazy(){}
  9. private static Lazy lazy;
  10. public static Lazy getInstance(){
  11. //当外部调用这个方法的时候判断,如果这个变量为null则给他创建个对象
  12. //否则直接返回类中的lazy
  13. if(lazy == null){
  14. lazy = new Lazy();
  15. }
  16. return lazy;
  17. }
  18. }

饿汉式

在类被加载时,自动会创建单例实例对象。不管用户是否会去调用该成员。

饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断了,节省了运行时间。

饿汉式是线程安全的,因为虚拟机保证只会装载一次,在装载类的时候是不会发生并发的。

  1. /**
  2. * 设计模式-单例模式-饿汉式
  3. * @作者:SimpleWu
  4. * 2018年10月26日 下午11:13:19
  5. */
  6. public class Hungry {
  7. private Hungry(){};
  8. //在类装置器中就已经创建好了
  9. private static Hungry hungry = new Hungry();
  10. public static Hungry getInstance(){
  11. return hungry;
  12. }
  13. }
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号