设计模式学习笔记——单例(Singleton)模式

@(设计模式)[设计模式, 单例模式, Singleton, 懒汉式, 饿汉式]

  • 设计模式学习笔记单例Singleton模式

    • 基本介绍
    • 单例案例
      • 类图
      • 实现代码
        • 饿汉式

          • Singleton类
          • 测试类
          • 运行结果
        • 懒汉式静态内部类
          • SingleTonLazy类
          • 测试方法
          • 运行结果
        • 懒汉式枚举
          • SingletonEnum类
          • 测试方法
          • 运行结果
    • 单例模式中的角色
      • Singleton
      • 类图

基本介绍

单例模式,顾名思义,就是一个类只能创建一个实例。

单例模式的定义:

  • 想确保任何情况下都绝对只有1个实例
  • 想在程序上表现出“只存在一个实例”

单例案例

类图

实现代码

饿汉式

Singleton类
package com.pc.singleton.example;/*** 单例模式(饿汉式)* Created by Switch on 2017-02-10.*/
public class Singleton {// 实例对象,静态,饿汉式private static Singleton instance = new Singleton();/*** 获取实例对象** @return 实例对象*/public static Singleton getInstance() {return instance;}/*** 私有化构造方法,无法new出来*/private Singleton() {System.out.println("生成了一个实例");}
}
测试类
package com.pc.singleton.example.test;import com.pc.singleton.example.SingleTonLazy;
import com.pc.singleton.example.Singleton;
import com.pc.singleton.example.SingletonEnum;
import org.junit.Test;import java.util.List;/*** 单例模式测试类* Created by Switch on 2017-02-10.*/
public class SingletonTest {@Testpublic void testSingleton() {System.out.println("饿汉式...");Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();if (s1 == s2) {System.out.println("s1与s2是一个对象");} else {System.out.println("s1与s2不是一个对象");}}
}
运行结果
饿汉式...
生成了一个实例
s1与s2是一个对象

懒汉式(静态内部类)

SingleTonLazy类
package com.pc.singleton.example;/*** 单例模式(懒汉式)——静态内部类* Created by Switch on 2017-02-10.*/
public class SingleTonLazy {/*** 获取实例对象** @return 实例对象*/public static SingleTonLazy getInstance() {return SingleTon.singleTon;}/*** 静态内部类,只有被调用到才会装载,从而实现了延迟加载*/private static class SingleTon {private static SingleTonLazy singleTon = new SingleTonLazy();static {System.out.println("类级别的静态内部类被加载");}private SingleTon() {System.out.println("类级别的静态内部类构造方法被调用");}}/*** 私有化构造方法,无法new出来*/private SingleTonLazy() {System.out.println("生成了一个实例");}
}
测试方法
    @Testpublic void testSingletonLazy() {System.out.println("懒汉式...");SingleTonLazy s1 = SingleTonLazy.getInstance();SingleTonLazy s2 = SingleTonLazy.getInstance();if (s1 == s2) {System.out.println("s1与s2是一个对象");} else {System.out.println("s1与s2不是一个对象");}}
运行结果
懒汉式...
生成了一个实例
类级别的静态内部类被加载
s1与s2是一个对象

懒汉式(枚举)

SingletonEnum类
package com.pc.singleton.example;import java.util.ArrayList;
import java.util.List;/*** 单例模式(懒汉式)——枚举* Created by Switch on 2017-02-10.*/
public enum SingletonEnum {/*** 1.从Java1.5开始支持;* 2.无偿提供序列化机制;* 3.绝对防止多次实例化,即使在面对复杂的序列化或者反射攻击的时候;*/instance;private String others;public List<String> buildlList() {final List<String> list = new ArrayList<>();list.add("Switch");list.add("Kity");list.add("Tom");return list;}private SingletonEnum() {}
}
测试方法
    @Testpublic void testSingletonEnum() {System.out.println("懒汉式...");SingletonEnum s1 = SingletonEnum.instance;SingletonEnum s2 = SingletonEnum.instance;if (s1 == s2) {System.out.println("s1与s2是一个对象");} else {System.out.println("s1与s2不是一个对象");}List<String> list = SingletonEnum.instance.buildlList();for (String s : list) {System.out.println(s);}}
运行结果
懒汉式...
s1与s2是一个对象
Switch
Kity
Tom

单例模式中的角色

Singleton

Singleton模式中,只有Singleton这一个角色。Singleton角色中有一个返回唯一实例的static方法。该方法总是会返回同一个实例。

类图

GitHub:DesignPatternStudy

——————参考《图解设计模式》

设计模式学习笔记——单例(Singleton)模式相关推荐

  1. 设计模式学习笔记——享元(Flyweight)模式

    设计模式学习笔记--享元(Flyweight)模式 @(设计模式)[设计模式, 享元模式, flyweight] 设计模式学习笔记享元Flyweight模式 基本介绍 享元案例 类图 实现代码 Big ...

  2. 设计模式学习笔记——中介者(Mediator)模式

    设计模式学习笔记--中介者(Mediator)模式 @(设计模式)[设计模式, 中介者模式, Mediator] 设计模式学习笔记中介者Mediator模式 基本介绍 中介者案例 类图 实现代码 Me ...

  3. 设计模式--单例(Singleton)模式

    模式意图 保证一个类只用一个实例,并且提供一个全局访问点 类图 应用场景 1.需要更严格地控制全局变量时,使用单例模式: 2.重量级的对象如线程池对象,数据库连接池对象,不需要多个实例的对象如工具类等 ...

  4. 设计模式学习笔记--Flyweight享元模式

    Flyweight模式也叫享元模式,是由GoF提出的23种设计模式中的一种.Flyweight模式是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用,所以叫享元.   此模式解决的是由于大量 ...

  5. 设计模式学习笔记--享元(Flyweight)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式 ...

  6. 设计模式学习笔记--Mediator 中介者模式

    我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成.当彼此引用的对象数量比较少时,此时对象之间就为直接交互(点对点).而当对象的数量增加时,这种直接交互会导致对象之间复杂的.混乱的引 ...

  7. 设计模式C++描述----01.单例(Singleton)模式

    一.概念 单例模式:其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享. class CSingleton { //公有的静态方法,来获取该实例 public: s ...

  8. 设计一个线程安全的单例(Singleton)模式

    在设计单例模式的时候.尽管非常easy设计出符合单例模式原则的类类型,可是考虑到垃圾回收机制以及线程安全性.须要我们思考的很多其它.有些设计尽管能够勉强满足项目要求,可是在进行多线程设计的时候.不考虑 ...

  9. C#设计模式学习笔记:(4)建造者模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7614630.html,记录一下学习过程以备后续查用.一.引言在现实生活中,我们经常会遇到一些构成比较复杂的物 ...

最新文章

  1. Samba服务搭建及详解
  2. ubuntu 12.04 桌面版关闭图形界面
  3. [转载]秀脱linux实战笔记linux-kernel-3.0.3实战篇
  4. 静态 非静态代码块和构造器的执行顺序测试方法
  5. nginx lua获取客户端ip
  6. [置顶] java高级工程师-----struts的内部运行机制详解
  7. java.util.Arrays$ArrayList addAll报错
  8. matlab2016b安装
  9. lacp协议文档概要
  10. Google Guice
  11. uni-app简单实现手写签名
  12. MySQL查询不同年份母亲节_不同国家的母亲节发展故事
  13. 百度贴吧引流的一些技巧_专注流量研究-万能的小胡
  14. 关于720vr 全景平台 全景图片制作系统 仿720云需要注意的坑 诚意贴
  15. 解决SVN文件不显示绿色小钩图标问题
  16. 【2013-10-3前】Win7-C盘空间瘦身
  17. 视频 | 你不知道的开源60年秘史
  18. 广州市番禺区2021-2022学年七年级第一学期期末考试英语试题
  19. 调试海康在线播放视频
  20. 微型计算机 电脑爱好者,电脑爱好者杂志

热门文章

  1. 【Python】我的第一个EXE程序
  2. C语言实例-大小写字母间的转换
  3. lodash和debounce
  4. sqlalchemy通过已经存在的表生成model的方法
  5. typescript 博客_如何使用Typescript自动化博客发布过程
  6. redux引用多个中间件_如何轻松创建您的第一个Redux中间件
  7. mac安装openjdk
  8. ubuntu16.04安装lua环境
  9. 双向链表的常用基本操作
  10. Mac下iTerm2的ls输出如何显示文件件颜色呢?