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. js 动态操作元素

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  2. C# API 获取系统DPI缩放倍数跟分辨率大小

    原文:C# API 获取系统DPI缩放倍数跟分辨率大小 using System; using System.Drawing; using System.Runtime.InteropServices ...

  3. Win8 Metro(C#)数字图像处理--2.36角点检测算法

    原文:Win8 Metro(C#)数字图像处理--2.36角点检测算法  [函数名称] Harris角点检测函数    HarrisDetect(WriteableBitmap src, int  ...

  4. android 录屏

    录屏,google了一下,记录下来,以免FQ android 4.4 录屏可通过adb:adb shell screenrecord /sdcard/video.mp4 (未测试) android 5 ...

  5. 项目中NHibernate问题及解决方法

     1.用户代码未处理 NHibernate.QueryException   Message=Type mismatch in NHibernate.Criterion.SimpleExpressio ...

  6. Mongodb Compile C++ Driver

    之前发现直接编译mongo源码中的驱动,静态库的驱动会很大,在链接使用的时候会报很多链接错误. 转而直接编译单独提供驱动源码,同样vc2008的版本也要做我的另一篇博文中修改,在这不多说,具体参见: ...

  7. [转] Protobuf高效结构化数据存储格式

    从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0. 一.Protobuf? 1. 是什么?  Goo ...

  8. Qt云服务/云计算平台QTC(Qt Cloud Services)入门(0)

    在这个“大数据”的时代,传统的跨平台C++库Qt已经将魔爪丧心病狂的伸向了“云计算”.在2012年的Qt开发者大会上,Qt发布了BaaS(Backend as a Service)服务——Engini ...

  9. 用代码关闭冰刃(IceSword)

    (*冰刃这个系统分析工具以前还没用过.这样高级的工具,用结束进程的方式就不试了.按手工关闭的流程实现.首先是通过遍历当前进程,确定冰刃进程的主窗体:然后发送WM_CLOSE关闭主窗体.当关闭对话框出现 ...

  10. js一道面试题

    题目是这样的,按照以下函数的结果写一个sub()方法: sub(1)(2)(3);/*return 6*/ sub(4)(3)(3);/*return 10*/ 我的山寨做法: function su ...