单例作用

  • 1 节省内存
  • 2 可以避免多种状态导致状态冲突

单例的创建步骤

  • 1 私有化构造方法
  • 2 私有化声明的属性
  • 3 getInstance
  • 4 方法需要静态

单例分类

1.懒汉式

2.饿汉式

两种单例区别:

饿汉式 线程安全的

懒汉式 线程不安全的

饿汉式:

package 设计模式之单例;
//饿汉式:
public class HungeryMode {
private final static HungeryMode INSTANCE=new HungeryMode(); public static HungeryMode getInstance() {
return INSTANCE;
}
private HungeryMode(){} }

懒汉式:

package 设计模式之单例;

public class LazyMode {
private static LazyMode instance=null; public static LazyMode getInstance() {
if(instance==null){
instance=new LazyMode();
} return instance;
} private LazyMode(){}
}

测试:

package 设计模式之单例;

public class Test1 {
public static void main(String[] args){
//饿汉式
HungeryMode instance=HungeryMode.getInstance();
HungeryMode instance2=HungeryMode.getInstance();
System.out.println("instance="+instance);
System.out.println("instance2="+instance2); // 懒汉式
LazyMode instance3=LazyMode.getInstance();
LazyMode instance4=LazyMode.getInstance();
LazyMode instance5=LazyMode.getInstance();
System.out.println("instance3="+instance3+","+instance3.hashCode());
System.out.println("instance4="+instance4+","+instance4.hashCode());
System.out.println("instance5="+instance5+","+instance5.hashCode()); }
}

测试结果:

创建多个对象,测试内存地址,如果相同说明创建的是同一个对象,说明创建的是单例!

延伸—————————–懒汉式线程安全性处理————————–

懒汉式线程不安全原因:

在多线程中,创建单例时,可能出现多个线程进入if(instance==null)执行语句中,在一个线程创建了一个instance后,其他进入执行语句的线程也会接着创建,这样就会产生多个对象,实现不了单例了,此时不安全了。

代码:

package 设计模式之单例;

public class LazyMode2 {
private static LazyMode2 instance=null;
private LazyMode2(){}
public static LazyMode2 getInstance(){
// 双重检查
if(instance==null){// 为了提高效率 尽可能少的让线程反复判断锁
synchronized (LazyMode2.class) {// 静态方法中 不能使用this 就可以用 本类.class 来代替
if(instance==null){
instance=new LazyMode2();
}
}
}
return instance;
}
}

Java中设计模式之单例设计模式-1的更多相关文章

  1. Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?

    什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的. 如果重 ...

  2. java基础学习之单例设计模式学习

    最近狂补java基础的我重新学习了下单例,下面直接贴出代码,以作备忘 package com.darling.single; /** * 单例模式 * 单例即在内存中只存在该类的一个实例,要想实现这个 ...

  3. Java高频面试题--单例设计模式

  4. java设计模式之单例设计模式

    单例设计模式 保证一个类在使用过程中,只有一个实例.优势就是他的作用,这个类永远只有一个实例. 优势:这个类永远只有一个实例,占用内存少,有利于Java垃圾回收. 单例设计模式关键点 私有的构造方法. ...

  5. Java单例设计模式的实现

    1. 单例设计模式的定义 单例设计模式确保类只有一个实例对象,类本身负责创建自己的对象并向整个系统提供这个实例.在访问这个对象的时候,访问者可以直接获取到这个唯一对象而不必由访问者进行实例化. 单例设 ...

  6. java开发中的23中设计模式详解--大话设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  7. Java笔记(十一)……单例设计模式

    设计模式 解决某一类问题最行之有效的方法 Java中有23中设计模式 单例设计模式 解决一个类在内存中只存在一个对象 思路 将构造函数私有化 在类中创建一个本类对象 提供一个方法可以获取到对象 两种方 ...

  8. 转:java单例设计模式

    本文转自:http://www.cnblogs.com/yinxiaoqiexuxing/p/5605338.html 单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton ...

  9. 单例设计模式Singleton之懒加载模式(懒汉模式)【原】

    单例设计模式Singleton之懒加载模式(懒汉模式) SingletonLazy.java类 package kingtool; import kingtool.http.IPTool; publi ...

随机推荐

  1. 2017-4-18 ADO.NET

    1.什么是ADO.NET?     (是一种数据库访问技术) ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问 ...

  2. 在c++中,标准输入string时cin 与getline两个函数之间的区别

    cin: cin函数是标准库的输入函数,在读取string时遵循以下规则: 1)读取并忽略开头所有的空白符(包括空格.换行符.制表符). 2)读取字符直到遇到空白符,读取终止. 例如: 当输入的是“  ...

  3. Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)

    1     概念定义 1.1   定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2   类型 创建类模式 2     原理特征 2.1   类 ...

  4. 修改nagios密码和遇到的问题

    htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin 密码 密码 service httpd restart 由于本屌丢掉一个s使/ ...

  5. C语言的一些基础

    一.C语言基础: 1.1.main函数是入口函数,用于进行link. 1.2..sln是解决方案的管理文件. 1.3.int:32位.short:16位.long:32位.long long:64位. ...

  6. CKEditor不借助CKFinder实现图片上传(.net版 ashx实现)

    参考博客:http://blog.csdn.net/mydwr/article/details/8669594 本人版本:4.4.6 打开文件:ckeditor/plugins/image/dialo ...

  7. windows下使用IIS的ARR实现站点的负载均衡

    1)    目的: 访问localhost:18066 对下边两个端口负载 localhost:18098 localhost:18099 2)    手段: 1.通过nginx 2.通过iis的AR ...

  8. 基于swift MKMapkit 开发的地图定位导航

    //  DTOneViewController.swift //  Mapper-JSON // //  Created by kcl on 16/8/8. //  Copyright © 2016年 ...

  9. String转int数字格式异常问题

     写在前面的话 差不多一年前就计划写博客,可因为种种原因一直没有写,反而我身边的一些同学在我建议他们写博客不久之后就写了,比如张博同学,基本每次总结一个知识点就写一篇,这样不但方便自己以后查看翻阅,也 ...

  10. ng-options语法详解

    我们先看下options的这条语句 ng-options="value.id as value.label group by value.group for value in myOptio ...