设计模式--单例模式

简介: 单例模式(singleton)单例模式最初的定义出现于《设计模式》(Addison-Wesley,1994)单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式(singleton)

单例模式最初的定义出现于《设计模式》(Addison-Wesley,1994)

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

单例模式的类图如下:


img_665fdfa8288385ff641a6a9951ffda8a.png
单例模式

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

static uniqueInstanceSingleton的唯一实例,static sharedInstance将它返回给客户端。通常,sharedInstance会检查uniqueInstance是否已经被实例化,如果没有,它会生成一个实例后返回uniqueInstance

何时使用原型模式?

在以下情形,会考虑使用原型模式:

  1. 类只有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法;
  2. 这个唯一实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。
使用Cocoa Touch框架中使用单例模式

Cocoa Touch框架中使用了大量的单例类。下面讨论其中的几个:

1.UIApplication类

框架中使用最常用的一个类是UIApplication类。它提供了一个控制并协调iOS应用程序的集中点。

每个应用程序有且仅有一个UIApplication的实例。它由UIApplicationMain函数在应用程序启动时创建为单例对象。之后,对同一UIApplication实例可以通过其sharedApplication类方法进行访问。

UIApplication对象为应用程序处理许多内存管理任务(housekepping task),包括传入事件的最初路由,以及为UIControl分发动作消息给核实的目标对象。它还维护应用程序中的所有UIWindow对象的列表。。应用程序对象总是被分配一个UIApplicationDelegate对象,应用程序将把重要的运行时状态通知给它,比如iOS应用程序中的应用程序启动、内存不足警告、应用程序终止和后台进行执行。这让委托(delegate)有机会做出适当的响应。

2.UIAcceleremeter类

Cocoa Touch框架中另一个常用的单例是UIAcceleremeter.UIAcceleremeter让应用程序可以注册,以接收来自iOS设备内置的加速度计的加速度的相关数据。应用程序会收到三维空间中沿主轴的线性加速度变化,可以使用这一数据检测设备的当前方向和当前方向的瞬间变化。

UIAcceleremeter是单例,所以不能直接生成它的对象。而是应该调用其sharedAcceleremeter单例类方法以访问它的唯一实例。然后设定它的updateInterval属性,并用自己的delegate对象设定delegate属性,以接收来自单例实例的加速度数据。

3.NSFileManager类

在Mac OS X v10.5和iOS2.0之前,NSFileManager曾经是单例模式的“严格”实现。调用它的init方法是空操作,并且唯一实例可以通过defaultManager类方法创建和访问。然而其单例实现并不是线程安全的。现在推荐生成新的NSFileManager实例以保证线程安全。这一方式被认为是更灵活的单例实现,其中工厂方法总是返回同一实例,但是也可以分配并初始化另外的实例。

喜欢我的可以关注收藏我的个人博客:RobberJJ

附上单例模式的Demo:DesignPattern_Singleton

目录
相关文章
|
5月前
|
设计模式 缓存 安全
【设计模式】【创建型模式】单例模式(Singleton)
一、入门 什么是单例模式? 单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。它常用于需要全局唯一对象的场景,如配置管理、连接池等。 为什么要单例模式? 节省资源 场景:某些对象创
164 15
|
12月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
91 2
|
6月前
|
设计模式 存储 安全
设计模式-单例模式练习
单例模式是Java设计模式中的重要概念,确保一个类只有一个实例并提供全局访问点。本文详解单例模式的核心思想、实现方式及线程安全问题,包括基础实现(双重检查锁)、懒汉式与饿汉式对比,以及枚举实现的优势。通过代码示例和类图,深入探讨不同场景下的单例应用,如线程安全、防止反射攻击和序列化破坏等,展示枚举实现的简洁与可靠性。
110 0
|
7月前
|
设计模式 安全 Java
设计模式:单例模式
单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。它通过私有化构造函数、自行创建实例和静态方法(如`getInstance()`)实现。适用于数据库连接池、日志管理器等需要全局唯一对象的场景。常见的实现方式包括饿汉式、懒汉式、双重检查锁、静态内部类和枚举。线程安全问题可通过`synchronized`或双重检查锁解决,同时需防止反射和序列化破坏单例。优点是避免资源浪费,缺点是可能增加代码耦合度和测试难度。实际开发中应优先选择枚举或静态内部类,避免滥用单例,并结合依赖注入框架优化使用。
|
8月前
|
设计模式 存储 安全
设计模式2:单例模式
单例模式是一种创建型模式,确保一个类只有一个实例,并提供全局访问点。分为懒汉式和饿汉式: - **懒汉式**:延迟加载,首次调用时创建实例,线程安全通过双重检查锁(double check locking)实现,使用`volatile`防止指令重排序。 - **饿汉式**:类加载时即创建实例,线程安全但可能浪费内存。 示例代码展示了如何使用Java实现这两种模式。
129 4
|
10月前
|
设计模式 存储 前端开发
前端必须掌握的设计模式——单例模式
单例模式是一种简单的创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。适用于窗口对象、登录弹窗等场景,优点包括易于维护、访问和低消耗,但也有安全隐患、可能形成巨石对象及扩展性差等缺点。文中展示了JavaScript和TypeScript的实现方法。
365 13
|
10月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
111 2
|
11月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
140 4
|
11月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
11月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
110 1