单例作用

  • 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. Unity 检测物体是否在相机视野范围内

    需求: 类似NPC血条,当NPC处于摄像机视野内,血条绘制,且一直保持在NPC头顶. 开始: 网上查找资料,然后编写代码: public RectTransform rectBloodPos; voi ...

  2. [编织消息框架][消息服务]jmx

    JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架,使用的是RMI技术. 比较经典的应用jdk bin目录下 jcons ...

  3. React之key详解

    一个例子 有这样的一个场景如下图所示,有一组动态数量的input,可以增加和删除和重新排序,数组元素生成的组件用index作为key的值,例如下图生成的ui展示: 上面例子中的input组件渲染的代码 ...

  4. Google Code Jam 2016 Round 1B Problem C. Technobabble

    题目链接:https://code.google.com/codejam/contest/11254486/dashboard#s=p2 大意是教授的学生每个人在纸条上写一个自己的topic,每个to ...

  5. 我喜欢的程序语言c++

    我喜欢的程序语言c++我喜欢的程序语言c++

  6. Winform控件根据文字内容自动调整最合适大小

    private void AutoSizeControl(Control control, int textPadding) { // Create a Graphics object for the ...

  7. 结束C#2的讲解:最后的一些特性

    分部类型 可以在多个源文件中为一个类型编写代码.特别适合用于部分代码是自动生成,而其他部分的代码为手动类型. 多个源代码文件组成的类型为分部类型 #region 7-1演示分部类型的混合声明 part ...

  8. hadoop高可靠性HA集群

    概述 简单hdfs高可用架构图 在hadoop2.x中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态.Active NameNode对外提供服务,而Standb ...

  9. 蓝桥杯-兰顿蚂蚁-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  10. 阿里云CentOS-7.2安装mysql

    我下载的阿里云的服务器系统centos7.2是纯内核版本,并没有其他的工具,所以这个系统是非常干净的.所以我就需要给系统安装一一些工具,来方便系统的管理与操作,我们上面讲到了关于服务器的yum的配置在 ...