首页 > 其他分享 >单例 (Singleton)设计模式介绍

单例 (Singleton)设计模式介绍

时间:2023-04-23 21:03:00浏览次数:37  
标签:Singleton 对象 single 实例 单例 设计模式

单例 (Singleton)设计模式

1.什么是设计模式?什么是单例设计模式?

设计模式:

  • 是在大量的实践中总结和理论化之后优选的代码结构、编程风格、 以及解决问题的思考方式。设计模免去我们自己再思考和摸索。就像是经典 的棋谱,不同的棋局,我们用不同的棋谱。”套路”

单例设计模式:

  • 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构 造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生 类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无 法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象, 静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象 的变量也必须定义成静态的

单例设计模式分为两种:

  • 单例(Singleton)设计模式-饿汉式,单例(Singleton)设计模式-懒汉式

例:

饿汉式
class Singleton {
// 1.私有化构造器
private Singleton() {
}
// 2.内部提供一个当前类的实例
// 4.此实例也必须静态化
private static Singleton single = new Singleton();
// 3.提供公共的静态的方法,返回当前类的对象
public static Singleton getInstance() {
return single;
}
}

懒汉式
class Singleton {
// 1.私有化构造器
private Singleton() {
}
// 2.内部提供一个当前类的实例
// 4.此实例也必须静态化
private static Singleton single;
// 3.提供公共的静态的方法,返回当前类的对象
public static Singleton getInstance() {
if(single == null) {
single = new Singleton();
}
return single;
}
}

懒汉式暂时还存在线程安全问题,多线程可修复

单例设计模式的优点:

  • 由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的 产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可 以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方 式来解决。

举例 java.lang.Runtime

image.png

应用场景

  • 网站的计数器,一般也是单例模式实现,否则难以同步。
  • 应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志 文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
  • 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库 资源。
  • 项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置 文件数据,都生成一个对象去读取。
  • Application 也是单例的典型应用
  • Windows的Task Manager (任务管理器)就是很典型的单例模式
  • Windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程 中,回收站一直维护着仅有的一个实例。

标签:Singleton,对象,single,实例,单例,设计模式
From: https://blog.51cto.com/u_15977171/6218579

相关文章

  • 设计模式-工厂模式
    适用性1.当一个类不知道它所必须创建的对象的类的时候。2.当一个类希望由它的子类来指定它所创建的对象的时候。3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。......
  • Singleton
    在很多操作中,比如建立目录数据库连接都需要这样的单线程操作。还有,singleton能够被状态化;这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安......
  • 15分钟入门23种设计模式:图解,范例和对比
    本文力图在15分钟内,通过UML图解、范例和类比,让你对面向对象的23种设计模式形成提纲挈领的认识,从而让我们在面临代码设计问题时更加成竹在胸。本文源代码: UML, SampleCode。开门见山我们直奔主题,分类呈现23种设计模式的庐山真面目:创建型(5)Creational结构型(7)Structural......
  • 设计模式分类(创建型模式、结构型模式、行为模式) #2
    1.创建型模式创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关系创建对象过程......
  • 设计模式-模板模式在Java中的使用示例-悍马模型制造示例
    场景设计模式-模板模式在Java中的使用示例:设计模式-模板模式在Java中的使用示上面整理了模板模式的使用示例,为加强理解特记录另一个使用示例,以下示例摘自设计模式之禅第二版。模板方法模式定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即......
  • Python 设计模式详解
    一、创建型模式1、工厂方法 Factory工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型制造业是一个国家工业经济发展的重要支柱,而工厂则是其根基所在。程序设计中的工厂类往往是对对象构造、实例化、初始化过程的封装,而工厂方法则可以升......
  • 设计模式之[构建者模式(Builder)]-C#
    说明:构建一个大对象时,可以分解成一个部分一个部分的构建,比如一台电脑由CUP、内存、主板、屏幕等,这些配件本身就是一个复杂的制造过程,一个一个构建后然后才组装成一台新的电脑。步骤1、定义要构建的对象——电脑2、定义一个抽象的构建器,内部的每个抽象方法构建一个配件并返回构......
  • C#单例类
    兼顾线程安全常用以下三种写法:publicsealedclassSingleton{privatestaticreadonlySingletoninstance=newSingleton();//显式静态构造器告诉C#编译器//不要将类型标记为BeforeFieldInit//ExplicitstaticconstructortotellC#compiler......
  • 单例模式:生成只存在一个的实例
    饿汉模式publicclassSingleton{ /*在类装载的时候就完成实例化*/ privatestaticSingletoninstance=newSingleton(); /*私有构造方法,防止被实例化*/ privateSingleton(){ } /*获取单例实例*/ publicstaticSingletongetInstance(){ returninst......
  • 【备忘录设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介备忘录模式(MementoPattern)是一种结构型设计模式。这种模式就是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并放在外部存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。备忘录模式的角色有三个......