学而时习之,温故而知新.

什么是单例?

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

单例模式特点

1、单例类只能有一个实例。

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

3、单例类必须给所有其他对象提供这一实例。

看到上面的文字是否能够理解,如果不能理解下面举个例子说下单例(希望能更好的理解)

假如下载有一个类,这个类里面有一个方法, 如果要使用这个类里面的方法,通常我们都是new 这个类然后在调用这个类里面的方法,但是如果有很多地方都使用了这个类里面的方法,如果每次都采用new 这个类

然后在调用类里面的方法明显不合理,这个时候我们可以考虑使用单例,

下面写一个按压的工具类,这里没有使用static

public class PressUtils {public void setPressChange(Context context, View... views) {if (context != null && views != null) {for (View view : views) {view.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:v.setAlpha(0.4f);break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_OUTSIDE:v.setAlpha(1.0f);break;}return false;}});}}}
}

现在把这个按压效果的工具类改成单例,方便很多地方调用,(个人大部分使用的是懒汉模式,或者可以说饱汉模式 如果对单例的几种模式不是很清楚,可以点击查看我的总结的几种模式)

使用 懒汉模式 实现的单例如下,

public class PressUtils {// 创建一个静态的类private static PressUtils pressUtils = null;// 私有化构造方法private PressUtils() {}// 获取唯一可用的对象public static PressUtils getInstance() {if (pressUtils == null) {pressUtils = new PressUtils();}return pressUtils;}public void setPressChange(Context context, View... views) {if (context != null && views != null) {for (View view : views) {view.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:v.setAlpha(0.4f);break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_OUTSIDE:v.setAlpha(1.0f);break;}return false;}});}}}
}

调用的方法如下

                PressUtils.getInstance().setPressChange(NavActivity.this, textView);// 或者PressUtils pressUtils = PressUtils.getInstance();pressUtils.setPressChange(NavActivity.this, textView);

可以看到调用的使用并没有使用new 类的方法

如果是刚学习java 的同学辨认是否使用单例, 可以看是否有static 是否有私有化的构造方法

可能会有人问了

// 私有化构造方法private PressUtils() {}

这个私有化的构造方法并没有使用到,写在这里的作用是什么呢,

这个构造方法可不能删除了,随便删除了不影响使用,但是删除了,就不是单例了,使用的时候完全可以使用new 类 的方法来使用这个工具类,这样也就失去了单例的意义,

个人总结私有化构造方法的作用: 防止随意创建类,随便修改.

个人总结: 单例什么时候使用呢,就是在一个类在多个地方使用使用的时候,我们可以考虑使用单例模式.

Android/Java 单例使用总结相关推荐

  1. java 单例设计模式 [

    为了保证类在内存中只能有一个对象,构造函数需要private外面不实例化对象,提供一个公共方法返回一个实例 //饿汉式 class Single{ //需要是static的,getInstance方法 ...

  2. Java单例的常见形式

    2019独角兽企业重金招聘Python工程师标准>>> Java单例的常见形式 本文目的:总结Java中的单例模式 本文定位:学习笔记 学习过程记录,加深理解,便于回顾.也希望能给学 ...

  3. java单例枚举_Java增强枚举的用例

    java单例枚举 Brian Goetz在消息" 增强枚举-用例 "中写道:"我们希望就现在实现的功能[ 增强枚举 ]获得用户反馈." 他陈述了他的消息的第一个 ...

  4. 最简单的java单例

    最简单的java单例源代码: class Singleton {  private Singleton()  { } public static Singleton instance = null; ...

  5. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  6. java 单例加锁方法的讨论

    //2014.8.26  review 一个经典 DCL 问题 public class Singleton { private static Singleton instance=null; pub ...

  7. mongodb java 单例_JAVA单例MongoDB工具类详解

    shasha 2018年09月07日 681 0 JAVA单例MongoDB工具类 JAVA驱动版本: org.mongodb mongo-java-driver 3.0.2 工具类代码如下: pac ...

  8. java单例的几种实现方法

    java单例的几种实现方法: 方式1: public class Something { private Something() {}private static class LazyHolder { ...

  9. java 单例 内存释放_周小抒 – 梦想仗剑走天涯 | Android中关于Context单例模式引起的内存泄漏以及解决方案...

    内存溢出与内存泄漏的区别: 内存溢出是由于应用所消耗的内存或者应用申请的内存超出了虚拟机分配的内存,也就是内存不够用了. 内存泄漏是某个不再使用对象由于被其他实例引用,导致不能被GC回收,而导致的内存 ...

最新文章

  1. android 沉浸式导航栏
  2. MATLAB中常用的产生随机数的几种函数
  3. vue如何获取数组中的键值_vue中操作数组的相关方法
  4. wdpc搭建https网站
  5. java 项目中遇到的错误
  6. python 波动率_旧文:历史波动率的计算 (Python)
  7. Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc) (转载)
  8. [Ext JS6]视图模型和数据绑定
  9. python中yaml模块的使用_详解Python yaml模块
  10. 淡定的写代码,淡定的人生
  11. Java——数据结构之顺序表
  12. 封装继承多态的关联性
  13. s7edge固件android7.0,欧版S7 edge刷上Android 7.0之后:超级流畅
  14. Mysql 数据备份(详细教程)
  15. BMI值(Body Mass Index,简称BMI),是指身高体重指数,是国际上常用的衡量人体肥胖程度和是否健康的重要标准,BMI的计算公式是:体重指数(BMI)=体重(kg)÷身高2(m)。
  16. 第二章、小实例,画字,画线,矩形,画图,动画(iOS学习笔记,从零开始。)
  17. Unity实战之牧师与魔鬼(动作分离版)
  18. 襄阳联通推“终端+物联网卡+M2M”OA方案
  19. 在html如何让图片居中 css,CSS怎么让图片居中?如何让图片居中显示
  20. 当一个c语言表达式中同时含有,如果在一个C语言表达式中有多个运算符,则运算时应该( )...

热门文章

  1. Anaconda环境管理
  2. Ubuntu20.04安装zabbix以及Cannot create the configuration file解决
  3. 数据类型对应的字节数
  4. vmware虚拟机怎么让窗口自动调整大小适应主机
  5. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
  6. Pipe Utilization管道利用率
  7. H.265视频编码与技术全析(上)
  8. 2021年大数据HBase(十四):HBase的原理及其相关的工作机制
  9. 手抖把Python2.7卸载了,导致了自己的yum不可用
  10. 解决使用Dockerfile来build镜像时pip install遇到的BUG