单例模式

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

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。

对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。
如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。

优点

一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。

缺点

Java代码示例

//单例模式
public class SingletonTest
{public static void main(String[] args){SingletonClass sc = SingletonClass.getInstance();SingletonClass sc2 = SingletonClass.getInstance();System.out.println(sc == sc2);LazySingletonClass lazySc = LazySingletonClass.getInstance();LazySingletonClass lazySc2 = LazySingletonClass.getInstance();System.out.println(lazySc  == lazySc2);}
}
//单例类
class SingletonClass
{private SingletonClass(){}private static SingletonClass  instance = new SingletonClass(); //只实例化一次public static SingletonClass getInstance(){return instance;}
}
//懒汉模式
//判断 没有才生成一个实例
class LazySingletonClass
{private LazySingletonClass(){}private static LazySingletonClass instance = null;public static LazySingletonClass getInstance(){if(instance == null){instance = new LazySingletonClass();return instance;}else{return instance;}}
}

转载于:https://blog.51cto.com/brightmoon/1320650

java基础——浅析设计模式之单例模式相关推荐

  1. java 23种设计模式 04 单例模式

    java 23种设计模式 04 单例模式 一.什么是单例模式 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象.也就是说,在整个程序空间中,该类只存在一个实例对象.   ...

  2. 黑马程序员-Java基础:设计模式总结

    --Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- Java基础部分设计模式 一.设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的 ...

  3. Java基础篇--设计模式

    目录 前言 设计模式 创建型模式 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 亨元模式 代理模式 行为型模式: 访问者模 ...

  4. Java进阶篇设计模式之一 ----- 单例模式

    前言 在刚学编程没多久就听说过设计模式的大名,不过由于当时还是个彻彻底底的菜鸟,并没有去触碰.直到在开始工作中对简单的业务代码较为熟悉之后,才正式的接触设计模式.当时最早接触的设计模式是工厂模式,不过 ...

  5. java基础之设计模式

    1 设置模式之单例设计模式 概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点. (1)饿汉式: /*** @Description 饿汉式* @author refuel* @version ...

  6. Java基础之设计模式七大原则

    设计模式 目的 代码重用性 可读性 可扩展性-可维护 可靠性 程序呈现高内聚.低耦合的特性 七大原则 -设计模式为什么这样设计的依据 单一职责原则 概念 对类来说的,即一个类应该只负责一项职责.如类A ...

  7. java基础_设计模式_设计基础(小鸭子游戏)

    小鸭子游戏,是好多爱好者接触设计模式.认知设计模式概念的一个入门. 每个初学者的理解不同,我加上自己的理解大体是这样的:前提是处理大规模时,假设池塘中有10000头小鸭子,有红头鸭,野鸭子,木头鸭子等 ...

  8. java基础(六)多线程/设计模式

    这辈子没办法做太多事情,所以每一件都要做到精彩绝伦! People can't do too many things in my life,so everything will be wonderfu ...

  9. java单例模式的七种写法_Java设计模式之单例模式的七种写法

    什么是单例模式? 单例模式是一种常见的设计模式,单例模式的写法有很多种,这里主要介绍三种: 懒汉式单例模式.饿汉式单例模式.登记式单例 . 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类 ...

  10. java中单例设计模式登记式单例类_java23种设计模式-创建型模式之单例模式

    单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比较频 ...

最新文章

  1. KinectFusion简介
  2. 一张图清晰明了将Java面向对象全部搞定!
  3. mysql 包 过程 job_mysql job实例全过程
  4. java 线程安全原子性_Java 线程安全之原子性
  5. 我的 2020 总结:跌宕起伏
  6. srpc 高性能通用 RPC 框架
  7. 基金教父约翰博格的创业史
  8. (王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征
  9. python去重且顺序不变_python实现文本去重且不打乱原本顺序
  10. i78750h和i58300h对比哪个好
  11. 程序员养生-人体白发的机制及治疗、调养恢复
  12. FFmpeg之视频转码
  13. JavaWeb解决中文下载出现乱码问题
  14. 【ctype.h isdigit】
  15. 《鲸鱼安慰了大海》精选篇章
  16. git push如何强制提交
  17. Git、GitHub、Gitee、GitLab的学习
  18. 卡巴斯基关于360胡乱解读“超级工厂”的声明
  19. java工具类调用Service层类的方法
  20. 二进制补码和十进制数的转换

热门文章

  1. 基于AE+C#实现在TOCControl中实现指定图层删除
  2. Android利用手机拍照和从相册读取照片的方法
  3. 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
  4. Hibernate-03-Hibernate的检索方式
  5. Flutter之SemanticsBinding和WidgetsBindingObserver简析
  6. 腾讯视频 Python 爬虫项目实战
  7. 年底了,整理了一些Android面试题给大家
  8. mysql客户端备份数据库失败,mysqlhotcopy的使用和安装方法【快速备份mysql数据库】及错误解...
  9. php pdo setfetchmode,PDOStatement::setFetchMode
  10. vscode如何查看修改过的部分_如何查看和修改Windows远程桌面端口