JDK设计模式应用——单例模式(Singleton)

《JDK源码分析》的分支,讲解设计模式在jdk中使用。

我们从三个方面讲述,一是:jdk源码中的设计模式;二是:讲解设计模式(UML图);三是:实现我们自己的设计模式代码。今天带来最简单的设计模式——单例模式(Singleton)。

一、jdk源码中的设计模式

我们先看java.lang包下的class Runtime

 public class Runtime {

     private Runtime() {}//私有的构造方法

     //Runtime类的私有静态实例
     private static Runtime currentRuntime = new Runtime();

     //获得静态实例的唯一方法
     public static Runtime getRuntime() {
         return currentRuntime;
     }
 }

  解释:

(1)存在私有的构造函数,不能通过new来得到类的实例。

(2)私有的静态实例,一个class只能对应唯一的对象。

(3)只能通过:类.get方法获得这个唯一的对象实例。

我们可以通过如下代码验证

Runtime r1 = Runtime.getRuntime();
Runtime r2 = Runtime.getRuntime();
//“==”为地址判断,为true表示:r1与r2指向同一对象。
System.out.println(r1 == r2);

结果显然为:true

二、讲解设计模式(UML图)

上面是Singleton的UML图。

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。(来源——百度百科)

单例模式的思想使用在很多方面,比如:一台计算机可以有若干打印机,但是一个时间只能有一个Printer Spooler,避免两个文件同时输入到打印机中。

单例模式满足三个条件:

(1)某个类只能有一个实例。

(2)类必须自行创建这个类的实例(创建静态成员变量或者在类的静态方法中生成实例)。

(3)类必须自行向整个系统提供这个实例。

总结:Java中单例模式(Singleton Pattern)定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”

关于JDK中采用单例模式的类的更多相关文章

  1. jdk中那些常见的类不能被继承的

    对于java中的类,如果是使用final修饰的话,那么这个类就不能够被继承,因为jdk的开发者认为,有一些最基本的类没要必要对开发者开放,如果用户 继承时操作有误,很可能引入很多问题.为了防止用户对基 ...

  2. java并发编程系列原理篇--JDK中的通信工具类Semaphore

    前言 java多线程之间进行通信时,JDK主要提供了以下几种通信工具类.主要有Semaphore.CountDownLatch.CyclicBarrier.exchanger.Phaser这几个通讯类 ...

  3. Objective-C中的单例模式(工具类)

    单例是iOS开发中经常会用到的一种设计模式,顾名思义,即创建一个类,该类在整个程序的生命周期中只有一个实例对象,无论是通过new,alloc init,copy等方法创建,或者创建多少个对象,自始至终 ...

  4. 说说JDK中的List-ArrayList、Vector、LinkedList

    为方便开发人员,JDK提供了一套主要数据结构的实现,比如List.Map等.今儿说说List接口. List接口的一些列实现中,最常用最重要的就是这三个:ArrayList.Vector.Linked ...

  5. (转载)JDK中的设计模式

    写的很好,学习道路更轻松一些 原文地址:http://blog.csdn.net/gtuu0123/article/details/6114197 JDK中设计模式 分类: Java相关 设计模式 2 ...

  6. 初探Java设计模式4:JDK中的设计模式

    JDK中设计模式 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助.一.设计模式是什么(1)反复出现 ...

  7. JDK中所包含的设计模式

    本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助. 一.设计模式是什么(1)反复出现问题的解决方案( ...

  8. [设计模式]JDK中的设计模式

    转载自:http://blog.csdn.net/gtuu0123/article/details/6114197 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图. 首先来个总结,具体 ...

  9. JDK中日期和时间的几个常用类浅析(二)

    java.util.Calendar   JDK中的java.util.Calendar类主要是用来处理日期和时间相关的算法运算.当你需要做一些关于日期和时间的高级算数操作时,此类可能就是你的最好选择 ...

随机推荐

  1. homework-08 C++课程课后思考与练习

    经过上次晚交作业导致没分以后 我再也不敢晚交作业了 今天就把这次作业先写了 homework Part 1 1. 理解C++变量的作用域和生命周期 a) 用少于10行代码演示你对局部变量的生命周期的理 ...

  2. 值栈与ognl

    ValueStack (值栈): 1.贯穿整个Action的生命周期(每个Action类的对象实例都拥有一个ValueStack对象).相当于一个数据的中转站.在其中保存当前Action对象和其他相关 ...

  3. Tomcat中配置JNDI数据源

    准备工作: Tomcat版本:tomcat6.0以上 下例中均使用MySQL数据库 将对应数据源的jar包和MySQL的驱动包拷贝至tomcat的lib文件夹下 一.全局数据源 1步骤一:配置 在to ...

  4. linux 下终端复用软件推荐——tmux

    使用过些linux终端,比如Tilda.Terminator. 之前最经常用的是Terminator,其可以上下左右分屏,比较方便,但其有个缺点是经常无故崩溃. 后来遇到Tmux,根据网上的设置配置了 ...

  5. UVALIVE 4970 最小权匹配

    首先贴一下这道题的BNU地址,UVA地址自己找吧. http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=11852 题意:这道题的意思就是,给你N个棋子的 ...

  6. 《精通ASP.NET MVC5》第2章 第一个MVC应用程序

      控制器     public class NewHomeController : Controller     {         // GET: /NewHome/         public ...

  7. 本地搜索神器-Everything

    现在硬盘越来越大了,经常机器上一堆资料,要找的时候,无论是XP还是Win7,都要搜索半天. 如果使用Everything,可以大大的加快这个过程. 具体的评价请看http://www.appinn.c ...

  8. java 分页

    ListAction.java package com.sy.action; import java.util.List; import com.opensymphony.xwork2.ActionS ...

  9. Java模拟登陆02【转载】

    在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢?     方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...

  10. 在 C# 中加载自己编写的动态链接库

    一.发生的背景    在开发新项目中使用了新的语言开发 C# 和新的技术方案 WEB Service,但是在新项目中,一些旧的模块需要继续使用,一般是采用 C 或 C++ 或 Delphi 编写的,如 ...