设计模式

解决某一类问题最行之有效的方法

Java中有23中设计模式

单例设计模式

解决一个类在内存中只存在一个对象

思路

    1. 将构造函数私有化
    2. 在类中创建一个本类对象
    3. 提供一个方法可以获取到对象

两种方法

饿汉式:类建立时分配对象

   1: class Single

   2: {

   3:     private Single(){}

   4:     //类建立时即初始化了对象

   5:     private static Single s = new Single();

   6:     public static Single getInstance()

   7:     {

   8:         return s;

   9:     }

  10: }

懒汉式:调用时才分配对象,也叫做对象的延时加载

   1: class Single

   2: {

   3:     private Single(){}

   4:     private static Single s;

   5:     public static Single getInstance()

   6:     {

   7:         //调用时再分配对象

   8:         if(s == null)

   9:             s = new Single();

  10:         return s;

  11:     }

  12: }

但是此懒汉式如果是多线程调用,容易出现new多个对象的问题,解决方法如下:

   1: class Single

   2: {

   3:     private Single(){}

   4:     private static Single s;

   5:     public static Single getInstance()

   6:     {

   7:         //调用时再分配对象

   8:         //为了避免每次都访问锁而设置的判断

   9:         if(s == null)

  10:         {

  11:             //加锁防止多线程调用时问题

  12:             synchronized(Single.class)

  13:             {

  14:                 if(s == null)

  15:                 {

  16:                     s = new Single();

  17:                 }

  18:             }

  19:         }

  20:         return s;

  21:     }

  22: }

对比之下发现:

懒汉式代码较多,而且不安全,所以建议使用饿汉式。

Java笔记(十一)……单例设计模式的更多相关文章

  1. Java中常用来处理时间的三个类:Date、Calendar、SimpleDateFormate,以及Java中的单例设计模式:懒汉式、饿汉式以及静态内部类式

    (一)java.util.Date类 1.该类有一个long类型的属性:用来存放时间,是用毫秒数的形式表示,开始的日期是从1970年1月1号 00:00:00.    2.该类的很多方法都已经过时,不 ...

  2. Java面向对象_单例设计模式

    单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当 ...

  3. Java 多线程之单例设计模式

    转载:https://segmentfault.com/a/1190000007504892 概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例.饿汉 ...

  4. java中的单例设计模式

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

  5. Java开发之单例设计模式

    设计模式之单例模式: 一.单例模式实现特点:①单例类在整个应用程序中只能有一个实例(通过私有无参构造器实现):②单例类必须自己创建这个实例并且可供其他对象访问(通过静态公开的访问权限修饰的getIns ...

  6. Java并发-懒汉式单例设计模式加volatile的原因

    懒汉式单例的double check.例一: class SingletonClass{ private static SingletonClass instance = null; private ...

  7. 02_javaSE面试题:单例设计模式

    还记得很多年前,面试就让在白板上写个单例模式,当时技术渣渣,还写的是class A.面试官还说,你就不能写个Singleton. 面试题 编程题:写一个Singleton示例 解析 什么是Single ...

  8. java笔记之静态修饰附和单例设计模式

     第六天笔记 静态修饰符static: 一.static修饰成员变量: static用来修饰成员变量叫静态成员变量,没有static修饰的成员变量叫非静态成员变量 静态成员的访问方式: (1)   用 ...

  9. Java学习笔记——单例设计模式Singleton

    单例设计模式:singleton 解决的问题: 确保程序在运行过程中,某个类的实例instance只有一份. 特点: 1 构造函数私有化 2 自己内部声明自己 3 提供一个public方法,负责实例化 ...

随机推荐

  1. Javascript 计算分页

    var getPageData = function (last_page, current_page) { var numberLinks = []; var i = 0; for (i; i &l ...

  2. javascript进阶——Ajax

    统的Web 页面和应用中,用户每点击页面上的某个部分,浏览器就会向服务器发出一个请求,等待服务器做出响应,然后返回一个完整新网页,但在大多数情况下用户不得不忍受页面闪烁和长时间的等待.随着Web技术的 ...

  3. linux安装mysql出现Could NOT find Curses (missing CURSES_LIBRARY CURSES_INCLUDE_PATH),提示解决方法

    [root@localhost mysql-5.5.11]# cmake . 出现以下错误提示: -- Could NOT find Curses (missing:  CURSES_LIBRARY ...

  4. R语言的一些笔记

    (1)包中函数必须在NAMESPACE中进行标记导出,否则就不认识了: 例如叫做rtest.Model.LogisticreRression 就能识别,而叫做Model.LogisticreRress ...

  5. 通过xib文件创建和连接UIView

    使用Xcode写程序,时间长了,对于界面上的元素,很多时候不想手写代码进行构建,但是有些UIView里面的子控件,又不能通过xib直接进行构造,要是总使用UIViewController来结合xib进 ...

  6. 使用代理下载Android SDK

    hx.gy:1080是红杏公益服务器,方便科学工作者访问一些常用的科学网站. 在Android SDK Manager中选择[Tools]->[Options],如下设置: HTTP Proxy ...

  7. JDBC之PreparedStatement模糊查询

    今天要做一个关于模糊查询的需求,以前用JDBC做精确查询都是用 "SELECT * FROM test WHERE id = ?",所以用模糊查询时理所当然的也用了"SE ...

  8. android ListView内数据的动态添加与删除

    main.xml 文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...

  9. java客户端连接MongoDB数据库的简单使用

    1.下载mongoDB的jar包,并引入到工程的CLASSPATH中下载:mongodb2.5驱动包下载 如果使用maven项目,最新的依赖如下: <dependency> <gro ...

  10. Hausdorff距离

    Hausdorff距离是描述两组点集之间相似程度的一种量度,它是两个点集之间距离的一种定义形式:假设有两组集合A={a1,…,ap},B={b1,…,bq},则这两个点集合之间的Hausdorff距离 ...