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

也是从那时起,开始学习设计模式。今天所说的就是单例模式,有很多时候,我们希望类只能实例化一次。例如我们经常使用的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. Element ui表格展示多张图片问题

    显示一张图片的方法: <el-table-column label="头像" width="100"> <template scope=&qu ...

  2. TIDB技术文档翻译

    http://blog.csdn.net/antony9118/article/details/60470115

  3. R-kmeans聚类算法

    K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般.最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中,那本书比较注重应用.看了Andrew Ng的这个讲义后才有些明白K- ...

  4. python字典学习笔记

    字典是一种可变容器模型,且可存储任意类型对象.键是不可变类型(且是唯一的),值可以是任意类型(不可变类型:整型,字符串,元组:可变类型:列表,字典).字典是无序的,没有顺序关系,访问字典中的键值是通过 ...

  5. font-face 在 Firefox无法正常工作问题

    @font-face存在的问题: 1.不同浏览器支持不同格式 2.Firefox默认情况下不允许跨域font-face,除非你可以添加“Access-Control-Allow-Origin” hea ...

  6. Erlang Concurrent 并发进阶

    写在前面的话 本文来源于官方教程 Erlang -- Concurrent Programming.虽然没有逻辑上的关系,但建议在掌握了Erlang入门系列教程的一些前置知识后继续阅读. 之前我是逐小 ...

  7. python进阶------进程线程(五)

    Python中的IO模型 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别 ...

  8. 【玩转树莓派】使用 sinopia 搭建私有 npm 服务器

    简介 使用 sinopia 的好处是,node系的工程师,内部协作时,使用自有 npm 包,会非常方便:另外,sinopia,会缓存已经下载过的包,可以在相当程度上,加速 npm install 相关 ...

  9. sqoop: mysql to hive

    sqoop import --connect 数据库连接 --username 数据库用户名--password 数据库密码 --table 导入的表 -m 1 --hive-import --tar ...

  10. mysql步骤详解

    一.配置MySQL数据库 1.解压绿色版mysql,并改名为mysql5.7,如下图 对比一下下图5.6以前的版本,少data目录(存放数据)和my-default.ini文件(配置信息) 二.安装服 ...