设计模式--单例模式

简介: 单例模式(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

目录
相关文章
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
29 2
|
8天前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
21 4
|
17天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
25天前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
16 1
|
7天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
17 0
|
1月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和复用性的关键技术之一。本文将通过探讨单例模式,一种最常用的设计模式,来揭示其在PHP中的应用及优势。单例模式确保一个类仅有一个实例,并提供一个全局访问点。通过实际案例,我们将展示如何在PHP项目中有效实现单例模式,以及如何利用这一模式优化资源配置和管理。无论是PHP初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和技巧,进而提升自己的编程实践。
|
1月前
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy<T>` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
33 1
|
1月前
|
设计模式 缓存 数据库连接
探索PHP中的设计模式:单例模式的实现与应用
在PHP开发中,设计模式是提高代码可复用性、可维护性和扩展性的重要工具。本文将深入探讨单例模式(Singleton Pattern)的基本概念、在PHP中的实现方式以及实际应用场景。单例模式确保一个类仅有一个实例,并提供全局访问点。通过具体代码示例和详细解释,我们将展示如何在PHP项目中有效利用单例模式来解决实际问题,提升开发效率和应用性能。
|
1月前
|
设计模式 存储 测试技术
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发领域,设计模式是解决常见问题的最佳实践。本文将深入探讨单例模式,一种确保类只有一个实例的设计模式,并提供实际应用示例。我们将从单例模式的基本概念讲起,通过实际案例展示如何在PHP中实现单例模式,以及它在不同场景下的应用和优势。最后,我们会探讨单例模式的优缺点,帮助开发者在实际项目中做出明智的选择。
|
1月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。