1概述

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2适用性

1.当类只能有一个实例而且客户可以从一个总所周知的访问点访问它的时候。

2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例的时候。

3参与者

Singleton:定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类的操作,可能复杂创建它自己的唯一实例。

4类图

5示例

Singleton

  1. package cn.lynn.singleton;
  2. public class Singleton {
  3. private static Singleton instance;
  4. private Singleton() {
  5. }
  6. public static Singleton getInstance() {
  7. if (instance == null) {
  8. instance = new Singleton();
  9. }
  10. return instance;
  11. }
  12. }

Test

  1. package cn.lynn.singleton;
  2. public class Test {
  3. public static void main(String[] args) {
  4. Singleton instance1 = Singleton.getInstance();
  5. Singleton instance2 = Singleton.getInstance();
  6. System.out.println(instance1);
  7. System.out.println(instance2);
  8. System.out.println(instance1 == instance2);
  9. }
  10. }

Result

    1. cn.lynn.singleton.Singleton@175d6ab
    2. cn.lynn.singleton.Singleton@175d6ab
    3. true

GoF23种设计模式之创建型模式之单态模式的更多相关文章

  1. GoF23种设计模式之创建型模式之原型模式

    一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 二.适用性 1.当一个系统应该独立于它的产品创建.构成和表示的时候. 2.当要实例化的类是在运行时刻指定的时候,例如:通过动 ...

  2. GoF23种设计模式之创建型模式之工厂方法模式

    一.概述 定义一个用于创建对象的接口,让子类去决定实例化哪个类.工厂方法将一个类的实例化延迟至其子类. 二.适用性 1.当一个类不知道它所必须创建的对象的类的时候. 2.当一个类希望由其子类来指定它所 ...

  3. GoF23种设计模式之创建型模式之抽象工厂模式

    一.概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 二.适用性 1.一个系统要独立于它的产品的创建.组合和表示的时候. 2.一个系统要由多个产品系列中的一个来配置的时候. ...

  4. GoF23种设计模式之创建型模式之建造者模式

    一.概述 将一个复杂对象的构建与其表示分离开来,使得同样的构建过程可以创建不同的表示. 二.适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式的时候. 2.当构造过程必须允许 ...

  5. GoF的23种设计模式之创建型模式的特点和分类

    创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”.这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成.就像我们去商场购买商品时, ...

  6. GoF23种设计模式之行为型模式之迭代器模式

    一.概述    给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.二.适用性1.当访问一个聚合对象的内容而无需暴露它的内部表示的时候.2.当对聚合对象的多 ...

  7. GoF23种设计模式之行为型模式之状态模式

    一.概述         定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 二.适用性 1.一个对象的行为取决于它的状态,并且它必须在运行时刻 ...

  8. GoF23种设计模式之行为型模式之策略模式

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1概述           定义一系列算法,把它们一个个都封装起来,并且让它们可以相互 ...

  9. GoF23种设计模式之行为型模式之命令模式

    一.概述 将一个请求封装为一个对象,从而可以使用不同的请求对客户端进行参数化.对请求排队或记录请求日志,以及支持撤销的操作. 二.适用性 1.当抽象出待执行的动作以参数化某个对象的时候. 2.当需要在 ...

随机推荐

  1. bash:haoop:command not found

    今天重新搭建了一个3节点的Hadoop集群,想着在上面测试一个MapReduce实例,然后就出现了以下错误: [hadoop@master hadoop-]$ hadoop -bash: hadoop ...

  2. sql server数据类型char和nchar,varchar和nvarchar,text和ntext

    varchar和nvarchar的区别: varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字节 ...

  3. DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录 专题

    首先要做的就是配置域名的MX 记录啦: 先添加一条A记录: mail.abc.com 指向 你的服务器IP! 然后添加域名的MX 记录,指向mail.abc.com A 记录( 即域名MX 记录的值为 ...

  4. arcgis js 几种拓扑关系详解

    arcgis js的拓扑关系,在处理复杂逻辑和分析时,可以通过拓扑关系,减小客户端的工作量 拓扑关系: 1.overlaps 重叠 这里的重叠跟平时我们理解的不太一样,这里的重叠,必须是A与B有交集, ...

  5. C# 的两种debug 方法

    第一种:需要把调试方法改成debug代码用 #if DEBUG 包裹 using System; using System.Collections.Generic; using System.Text ...

  6. i++ ++i i=i+1 和i+=1

    这几个运算符的差别总是过一段时间就爱搞混,每次需要百度,还是自己记录一下方便查阅. int i=0; System.out.println(i++); 输出:0 int i=0; System.out ...

  7. cmd对其他盘符进行操作

    一般我们打开cmd命令时,会出现如下界面: 现在,我想要对g盘进行操作,则输入 --> g:,然后回车,如图: 可以查看一下g盘下的所有子目录,输入 --> dir,回车,结果如下: 我想 ...

  8. EF中Entity SQL用法

    public List<policecase> GetPoliceCaseList(PoliceCaseFilter view)        {            string sq ...

  9. 腾讯云服务器手动和自动安装WordPress网站程序

    如果我们需要建站的话,对于基础个人网站.博客建站选择基础的1Mbps带宽配置的1GB内存的腾讯云服务器还是够用的,且如果我们需要用来建网站的话可以手工添加程序,以及有些面板,比如宝塔面板是自带CMS程 ...

  10. mybatis-关联关系

    在实现实列中我们在学生表里面增加了一个地址表用于与学生表的一对一 1.创建地址实体类: package com.java1234.mappers; import com.java1234.model. ...