在我们做开发的时候,有些类的实例每次都new一个出来是没有必要的,因为它太占用内存咯。因此,单利模式有了它的用武之地了。最简单的单利模式如下:

private static LogCatHelper instance = null;

public static LogCatHelper getInstance(Context mContext,String path){

if(instance == null){

instance = new LogCatHelper(mContext,path);

}

return instance;

}大家一看,这不很简单嘛,没有啥难处啊。但是,你在深入的看一下,会发现,这样的写法并不难保证唯一性,为啥呢?当在多线程运行的时候,同时进入到getInstance方法中,instance的判断都是null,所以唯一性就不是那么绝对了这样写。因此,下面这种方法很好的解决了这个问题:

public synchronized static LogCatHelper getInstance(Context mContext,String path){

if(instance == null){

instance = new LogCatHelper(mContext,path);

}

return instance;

}难不倒我,加个同步锁不就搞定了。ok,上面唯一性的问题是搞定了,但是仔细的在研究一下,发现问题了,每次执行getInstance方法的时候都会受到同步锁的影响,这样的话,运行的效率就会大大的降低了,怎么办呢?那我们就只有在第一次创建的时候加个同步锁不就完事了吗,如下:

public static LogCatHelper getInstance(Context mContext,String path){

if(instance == null){

synchronized (LogCatHelper.class) {

if(instance == null){

instance = new LogCatHelper(mContext,path);

}

}

}

return instance;

}好了,这样的单利真是完美了,这好像有个名字叫双重锁定,百度就可以了,呵呵。

单利java_java设计模式之单利模式相关推荐

  1. 建造者模式java_java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  2. facade java_Java设计模式之Facade模式

    Java设计模式之Facade模式  GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易 ...

  3. 单利 java_Java设计模式-单利模式

    单例模式 作为对象的创建模式,单例模式确保其某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类.单例模式有以下特点: 1.单例类只能有一个实例 2.单例类必须自己创建自己的 ...

  4. 单利java_java中创建单利的两种方式

    /** * 单利模式 * 恶汉式 * * 单例模式的设计步骤: * 1.将构造方法私有化 * 2.创建一个static修饰的对象  在静态方法中可以调用 * 3.开放一个static修饰的获取唯一一个 ...

  5. 工厂模式 java_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  6. 访问者模式 java_java设计模式之访问者模式

    写这篇文章之前,我也看了十几篇网络大牛写的访问者设计模式的文章,都说这个访问者模式是最复杂的一个,但是我觉得跟其他的设计模式并没有太多的不同,因此自己整理了一下,相信大多数人都能看懂. 一.认识访问者 ...

  7. 组合模式 桥接模式 java_java设计模式5.组合模式、门面模式、享元模式、桥接模式...

    组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...

  8. 单利 java_JAVA中的单利

    单列: 单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例 ...

  9. fcq java_Java设计模式百例 - 解释器模式

    解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文. 解释器模式在我们开发过程中并不常用 ...

最新文章

  1. 基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)
  2. pyqt5界面与逻辑分离--信号槽的装饰器实现方式
  3. python学习之--安装IDE(eclipse+pydev)
  4. mysql varchar 非空判断_工资从1万到3万,你还差mysql数据库优化之系列三
  5. 【地理信息系统GIS】教案(七章全)第七章:3S技术综合应用
  6. 从零开始学keras之神经网络的数学表示
  7. 分形——数学与艺术结合的明珠
  8. 关于centos启动报错:Failed to start Crash recovery kernel arming的解决方案
  9. [BZOJ] 1639: [Usaco2007 Mar]Monthly Expense 月度开支
  10. 【爬虫】身份证前6位区域划分编码爬取
  11. cdr宏教程_cdr软件怎么使用宏批量导出文件?
  12. 30分钟快速了解云计算
  13. Java HotSpot虚拟机提高性能,做了哪些操作
  14. 解决不支持S/W HEVC(H265)解码/找不到FFmpeg64.dll
  15. 地面搜索matlab算法,数学建模中的地面搜索问题
  16. 调用大智慧L2接口是什么原理?作用是什么?
  17. STM32 的核心Cortex-M3 处理器
  18. oxidized配置(docker版)
  19. 一千度近视眼学计算机,【震惊了】你见过近视8百,1千,3千,5千度?你见过9000度吗?...
  20. iOS 10适配须知

热门文章

  1. c++ 部落(在一个社区里,每个人都有自己的小圈子)
  2. 【Chrome】Chrome-devtools:对ios-safari移动端的H5页面进行调试(ios-webkit-debug-proxy)
  3. springboot毕设项目汽车销售管理系统3ytu1(java+VUE+Mybatis+Maven+Mysql)
  4. [语音录制与播放]stm32+adc+dac
  5. 使用方式一 实现电影院买票 并且存在问题
  6. C语言之判断素数与再见敲K
  7. 性能提升40%:腾讯TKE用eBPF绕过conntrack优化Kubernetes Service
  8. 一个故事讲清https
  9. 计算机应用基础知识办公软件使用,计算机应用基础教程-Windows 7+Office 2010.pdf
  10. python中文词频排序_Python中文词频统计