【设计模式】单例模式的理解与场景举例

软件设计常用的一种设计模式 —— 单例模式

体现:在应用这个模式时,单例对象的类必须保证只有一个实例存在。

好处:许多时候整个系统只需要拥有一个全局的对象,这样有利于我们协调整个系统的行为。

场景举例

1.服务器的配置信息放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象读取配置信息,这样也简化了复杂环境下的配置管理。

2.windows的task manager(任务管理器)就是单例的,我们并不能同时打开两个。

3.多线程的线程池一般也是单例模式的,因为线程池要方便对线程进行控制管理。

实现方式

实现单例模式的对象类中构造函数是私有的,这样其他代码就不能通过调用该构造函数实例化对象,只能通过该类的静态方法(通常使用getInstance这个名词)来得到该类的唯一实例。

类别:

不加锁(synchronized)的懒汉单例模式,不支持多线程,实际上也称不上单例模式。

public class Singleton{

private Singleton(){

}

private static Singleton singleton;

public static Singleton getInstance(){

if(singleton==null){

singleton = new Singleton();

}

return singleton;

}

}

进化一点点的话,加上synchronized关键词。

public class Singleton{

private static Singleton singleton;

private Singleton(){}

public static synchronized getInstance(){
        if(singletion == null){
   singletion = new Singletion();
          }
          return singletion;
          }
}

或者,但是这样容易产生垃圾。饿汉式倒是加载很快,只是会占据一定内存。

public class Singletion{

private static Singletion singleton = new Singletion();

private Singletion(){}

public static Singletion getInstance(){

return singleton;

}

}

最好的一种方式,枚举。简洁、且自动支持序列化机制,绝对防止多次实例化。

public enum Singleton{

INSTANCE;

public void method(){}

}

原文地址:https://www.cnblogs.com/lldyl/p/9862354.html

时间: 2024-10-25 11:25:08

【设计模式】单例模式的理解与场景举例的相关文章

简易的设计模式——单例模式

定义 单例模式是一种保证一个类中只有一个实例对象的软件设计模式.它需要确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这个还是比较好理解的,一个国家只能有一个国王,不可以出现第二个,所有的人都只能来膜拜这个伟大的国王. 下面直接上代码. 实现 国王类 public class King { //确保只有一个国王 private static final King king=new King(); //保证不再产生新的国王了 private King(){} //这个国家的人通过

设计模式——单例模式学习

单例模式属于设计模式中的创建模式,即创建对象时,不再由我们直接实例化对象,而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能.更好的架构优势. 1.概念 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.选择单例模式就是为了避免不一致状态.使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection). Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对

设计模式-单例模式,观察者模式

序言 咳咳,今天起,我要把对设计模式的理解心得,用全新的案例去分析,分享给大家.希望大家能够喜欢. 观察者模式 举例阐述:游戏情节,一颗小男孩,丢到众多鬼子附近,爆炸啦,根据炸弹的威力计算爆炸后鬼子的血量,假定有些鬼子有防具,有些鬼子没有防具. 分析:这种情况,使用观察者模式是比较理想的,因为观察者模式的就是是处理对象间一对多的依赖关系的,当一个对象发生变化,其它依赖他的对象都要得到通知并更新. 定义:在观察者模式中,上述小男孩被称为主题,而小鬼子们就被称为观察者. 下面我用代码,把举例给演示出

最简单的设计模式——单例模式的演进和推荐写法(Java 版)

前言 如下是之前总结的 C++ 版的:软件开发常用设计模式—单例模式总结(c++版),对比发现 Java 实现的单例模式和 C++ 的在线程安全上还是有些区别的. 概念不多说,没意思,我自己总结就是: 有这样一个类,该类在生命周期内有且只能有一个实例,该类必须自己创建自己的这个唯一实例,该类必须给所有其他对象提供这一实例(提供全局访问点),这样的类就叫单例类. 简单的说就是满足三个条件: 1.生命周期内有且只能有一个实例 2.自己提供这个独一无二的实例 3.该实例必须是能全局访问的 需要的考虑的

JAVA Static方法与单例模式的理解

近期用sonar測评代码质量的时候,发现一个问题,project中一些util类,曾经写的static方法都提示最好用单例的方式进行改正. 为此,我细致想了想,发现还是非常有道理的.这里谈谈我个人对static方法与单例模式的理解. 所谓单例模式,我不做过多解释,推荐java设计模式之禅这本书,好好理解一下. 这里我谈谈两种写法: 曾经一些公共的类,我不假思索,习惯依照例如以下写法去写: public class DateUtil { public final static String DAT

awk 场景举例

以下面的示例日志为例: 202.189.63.115 - - [31/Aug/2012:15:42:31 +0800] "GET / HTTP/1.1" 200 1365 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1" $0 就是整个记录行 $1 就是访问 IP " 202.189.63.115" $4 就是请求时

c#设计模式-单例模式(面试题)

c#设计模式-单例模式 单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, public class Singleton { private static Singleton _instance = null; private Singleton(){} public static Singleton CreateInstance() { if(_instance == null) { _instance = new Singleton(); } return _in

c#设计模式-单例模式【转】

单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题 public class Singleton { private static Singleton _instance = null; private Singleton(){} public static Singleton CreateInstance() { if(_instance == null) { _instance = new Singleton(); } return _instance; } } 第

设计模式 - 单例模式之多线程调试与破坏单例

前言 在之前的 设计模式 - 单例模式(详解)看看和你理解的是否一样? 一文中,我们提到了通过Idea 开发工具进行多线程调试.单例模式的暴力破坏的问题:由于篇幅原因,现在单独开一篇文章进行演示:线程不安全的单例在多线程情况下为何被创建多个.如何破坏单例. 如果还不知道如何使用IDEA工具进行线程模式的调试,请先阅读我之前发的一篇文章: 你不知道的 IDEA Debug调试小技巧 一.线程不安全的单例在多线程情况下为何被创建多个 首先回顾简单线程不安全的懒汉式单例的代码以及测试程序代码: /**