Java学习笔记之---单例模型

单例模型分为:饿汉式,懒汉式

(一)要点

1.某个类只能有一个实例

2.必须自行创建实例

3.必须自行向整个系统提供这个实例

(二)实现

1.只提供私有的构造方法

2.含有一个该类的静态私有对象

3.提供一个静态的公有方法用于创建,获取静态私有对象

(三)饿汉式

在对象创建过程中实例化

public class EHan {
//私有构造函数
private EHan(){
}
//创建该类型的私有静态实例
private static EHan ehan=new EHan();
//创建该类型的公有静态方法,返回静态实例对象
public static EHan getehan(){
return ehan;
}
}
class EHanTest{
public static void main(String[] args){
EHan one=EHan.getehan();
EHan two=EHan.getehan();
System.out.println(one==two);
}
}

运行结果:true

(四)懒汉式

静态公有方法中实例化

public class EHan {

    //私有构造函数

    private EHan(){

    }

    //创建该类型的私有静态实例

    private static EHan ehan=null;

    //创建该类型的公有静态方法,返回静态实例对象

    public static EHan getehan(){

        if(ehan==null){

            ehan=new EHan();

        }

        return ehan;

    }

}

class EHanTest{

    public static void main(String[] args){

        EHan one=EHan.getehan();

        EHan two=EHan.getehan();

        System.out.println(one==two);

    }

}

运行结果:true

(五)懒汉式PK饿汉式

1.饿汉式比懒汉式块

2.饿汉式线程安全,懒汉式存在线程风险

(六)单例模型的优点

1.在内存中只有一个对象,节省内存空间

2.避免频繁的创造和销毁对象,提高性能

3.避免对共享资源的多重占用

(七)单例模型的缺点

1.扩展比较困难

2.如果实例化后的对象长期不利于,系统将默认为垃圾进行回收,造成对象状态丢失

Java学习笔记之---单例模型的更多相关文章

  1. PowerMock学习笔记,对单例的测试方法

    对单例进行mock 单例类 public class PmModelHandler { // 包含要mock掉的成员变量 private static LogService logger = LogS ...

  2. java新手笔记12 单例

    1.单例 package com.yfs.javase; public class Singleton { //private static final Singleton single = new ...

  3. SpringMVC学习笔记:单例与并发问题

    Spring中的Bean默认都是单例(singleton),Spring中Bean的scope属性有五种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时 ...

  4. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  5. 【Java】设计模型-五种单例模型

    一. 什么是单例模式 只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在. 单例模式有很多好处,它能够 ...

  6. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  7. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  8. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  9. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

随机推荐

  1. glibc_error reporting

    很多GNU C库里的函数都会侦测并报告错误条件.我们的程序需要检测这些错误条件.比如:我们打开一个输入文件时需要判断该文件是否正确的打开.如果没有正确打开,我们需要打印错误或者采取其他正确的方式.为了 ...

  2. Docker镜像与容器命令 专题

    https://yeasy.gitbooks.io/docker_practice/content/install/mirror.html docker的工作流程图: 至少需要配备三样东西去使用doc ...

  3. 【Windows10 IoT开发系列】“Hello,World!”指导

    原文:[Windows10 IoT开发系列]"Hello,World!"指导 本文主要是介绍使用C#来开发一个可以运行在Raspberry Pi2上的一个基本项目. ​1.在启动V ...

  4. UWP入门(十一)--使用选取器打开文件和文件夹

    原文:UWP入门(十一)--使用选取器打开文件和文件夹 很漂亮的功能,很有趣 重要的 API FileOpenPicker FolderPicker StorageFile 通过让用户与选取器交互来访 ...

  5. 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)

    在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但 ...

  6. 在本地安装RabbitMQ Server教程以及可能遇到的问题及解决办法

    1. Download latest erlang OTP platform from : erlang:http://www.erlang.org/download.html (The latest ...

  7. 解码mmo游戏服务器三:大地图同步(aoi)

    问题引入:aoi(area of interest).在大地图中,玩家只需要关心自己周围的对象变化,而不需要关心距离较远的对象的变化.所以大地图中的数据不需要全部广播,只要同步玩家自己视野范围的消息即 ...

  8. 基于 ZooKeeper 搭建 Spark 高可用集群

    一.集群规划 二.前置条件 三.Spark集群搭建         3.1 下载解压         3.2 配置环境变量         3.3 集群配置         3.4 安装包分发 四.启 ...

  9. jmeter模拟spike测试(尖峰测试)

    概述 尖峰测试(Spike testing)在性能测试中属于压力测试的一个子集.指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景. 为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反 ...

  10. 球体的双目视觉定位(matlab,附代码)

    球体的双目视觉定位(matlab,附代码) 标签(空格分隔): 机器视觉 引言 双目视觉定位是我们的一个课程设计,最近刚做完,拿出来与大家分享一下,实验的目的是在拍摄的照片中识别球体,并求出该球体到相 ...