笔者记得去面试时曾被问起这个模式,当时还没有看过设计模式,对设计模式基本上一无所知,不过可以肯定的是笔者用过单例模式。当时回答的风马牛不相及,很尴尬。

也是从那时起,开始学习设计模式。今天所说的就是单例模式,有很多时候,我们希望类只能实例化一次。例如我们经常使用的Method等就是最典型的单例模式。当然很多框架中也是有单例模式。

先看下类图:

大话设计模式-类图

单例模式分为懒汉式和饿汉式。先看下笔者的demo。

/**
* 饿汉式
*/
public class SingleDemo { private static SingleDemo singleDemo = new SingleDemo(); private SingleDemo() { } public static SingleDemo getInstance() {
return singleDemo;
}
}
/**
* 懒汉式
*/
public class SingleDemo2 { private static SingleDemo2 singleDemo2 = null; private SingleDemo2() { } public static SingleDemo2 getInstance() {
if (null == singleDemo2) {
synchronized (SingleDemo2.class) {
if (null == singleDemo2) {
return singleDemo2 = new SingleDemo2();
}
}
}
return singleDemo2;
}
}
/**
* 内部类 懒汉式
*/
public class SingleDemo3 { private SingleDemo3() { } private static class SingleHold {
private static SingleDemo3 singleDemo3 = new SingleDemo3();
} public static SingleDemo3 getInstance() {
return SingleHold.singleDemo3;
}
}
/**
* 客户端
*/
public class Test { public static void main(String[] args) { SingleDemo singleDemo = SingleDemo.getInstance();
SingleDemo singleDemo1 = SingleDemo.getInstance();
System.out.println(singleDemo == singleDemo1); SingleDemo2 singleDemo2 = SingleDemo2.getInstance();
SingleDemo2 singleDemo21 = SingleDemo2.getInstance();
System.out.println(singleDemo2 == singleDemo21); SingleDemo3 singleDemo3 = SingleDemo3.getInstance();
SingleDemo3 singleDemo31 = SingleDemo3.getInstance();
System.out.println(singleDemo3 == singleDemo31);
}
}

运行结果:

true
true
true

这三者笔者推荐大家使用内部类形式,三者的区别网上很多,笔者偷下懒给大家一个地址:http://www.cnblogs.com/coffee/archive/2011/12/05/inside-java-singleton.html

以上,希望能帮助学习单例模式的小伙伴。

java 之 单例模式(大话设计模式)的更多相关文章

  1. linkin大话设计模式--单例模式

    linkin大话设计模式 开文前先弱弱的问一句:什么是设计模式?我在研究java2ee的时候有研究过,在学js的时候也有看到.设计模式的概念最早源于建筑设计大师<建筑的永恒算法>一书,它表 ...

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

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

  3. java 之 简单工厂模式(大话设计模式)

    以前只是看设计模式,每次看完都去理解一次,并没有手动去写代码,所以理解的还不是很深刻,最近查看框架源码,发现很多地方用到的都是设计模式,因为对设计模式理解的不够深刻,所以源码查看进度很慢!现在决定来温 ...

  4. java 之 代理模式(大话设计模式)

    java代理模式顾名思义,就类似于大学,我想和冰可乐,可是我又在玩游戏,于是我让我的室友帮我把可乐带回来,简单的来说我的室友就是代理,而买可乐就是需要做的行为.这是笔者理解的代理模式 大话设计模式-类 ...

  5. java 之 原型模式(大话设计模式)

    原型模式,在笔者理解看来就是克隆,当我们在创建第一个对象时,已经给对象赋值完毕,此时我们需要一个当前对象的副本,如果没有原型模式,我们会再次创建一个对象,然后后二次赋值,保证两个对象完全一致, 这样我 ...

  6. java 之 迭代器模式(大话设计模式)

    众所周知,java是编程语言中的高级语言,在java的世界里,已经有前辈为我们封装好了各个很好用的框架,工具类等,今天笔者想说的迭代器模式也已经被封装过. 就是我们经常使用的for循环迭代器.或者It ...

  7. Java大话设计模式

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

  8. 大话设计模式Python实现-单例模式

    单例模式(Singleton Pattern):保证类仅有一个实例,并提供一个访问它的全局访问点. 下面是单例模式的demo: #!/usr/bin/env python # -*- coding:u ...

  9. java 之 工厂模式(大话设计模式)

    在以前的文章里面讲述过简单工厂模式,见链接:http://www.cnblogs.com/zhuxiansheng/p/7873161.html 简单工厂模式解耦了客户端和实现的依赖,不过如果有再次扩 ...

随机推荐

  1. Jni中C++和Java的参数传递(转)

    如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用VC++6.0实现JNI的最简单的例子 ...

  2. Django web框架篇:基础

    对于web开发者来说,socket是基础.因为Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 对于真实开发中的python web程序来说,一般会分为两 ...

  3. HDFS的接口(命令行接口和Java接口)--笔记

    HDFS 文件的系统访问的接口 1.Hadoop的shell命令脚本 hadoop fs -ls   列出某一个目录下的文件 hadoop fs -lsr 递归的方式列出所有文件 hadoop fs ...

  4. css英文字符或者数字不换行的问题

    table-layout:fixed; word-break: break-all; overflow:hidden;

  5. android+eclipse+mysql+servlet(Android与mysql建立链接)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原创地址  .作者信息和本声明.http://www.cnblogs.com/zhu520/p/7724524.html 经过两天的时间我终于把A ...

  6. Python文件夹备份

    Python文件夹备份 import os,shutil def file_copy(path1,path2): f2 = [filename1 for filename1 in os.listdir ...

  7. stack 的入门

    #include "iostream"#include "stack" using namespace std; void main12(){ stack &l ...

  8. python+selenium安装

    1.下载Python 请到官网自行下载安装https://www.python.org/downloads/ 在安装的时候,注意一定要勾上这个选项,可以免去我们配置系统变量的麻烦,如果你忘了,没关系, ...

  9. 使用MS Test做单元测试

    声明:本篇博客翻译自:http://www.c-sharpcorner.com/article/unit-testing-with-ms-tests-in-c-sharp/ 写在翻译之前: 依然清晰的 ...

  10. [C#源代码]使用SCPI指令对指定通信端口(RS232/USB/GPIB/LAN)的仪器编程

    本文为原创文章,源代码为原创代码,如转载/复制,请在网页明显位置标明原文名称.作者及网址,谢谢! 本软件是基于NI-VISA/VISA32(Virtual Instrument Software Ar ...