Harmony设计模式-单例模式

简介: Harmony设计模式-单例模式

Harmony设计模式-单例模式

前言

软件设计模式([Design pattern](baike.baidu.com/item/Design pattern/10186718?fromModule=lemma_inlink)),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

设计模式的作用是:为我们在进行稍微复杂的程序设计时,迅速提高可靠的解决方案。而不是等待问题暴露了,再去修复我们的程序

小故事

1991年,Erich Gamma 与Richard Helm, Ralph Johnson ,John Vlissides合作出版了Design Patterns - Elements of Reusable Object-Oriented Software 一书,在此书中共收录了23个设计模式

  • 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  • 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  • 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

在实际开发中,很少会有程序员在同一个项目中全部用上以上的23种设计模式。所以边学边用、学以致用即可。

单例模式

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

好比如在一个规模不大的公司中,存在以下的角色

  1. 人事
  2. 财务
  3. 开发
  4. 测试
  5. 实施
  6. 运维
  7. 网管
  8. 老板

但其实由始至终,都只是你一个人在充当以上的角色而已。

使用场景

太多了

  1. 系统服务管理:鸿蒙操作系统中有很多系统服务,如系统时间管理、网络管理等。这些服务需要全局唯一的实例来提供服务,以确保服务的唯一性和一致性。通过使用单例模式,可以确保系统中只有一个这样的服务实例,方便管理和访问。
  2. 设备访问:鸿蒙操作系统中的设备访问层,如摄像头访问、传感器访问等,也需要使用单例模式来确保只有一个实例进行设备访问。这有助于避免多个实例同时访问设备导致的冲突和资源浪费。
  3. 资源管理:鸿蒙操作系统中的资源管理器,如内存管理器、文件系统管理器等,也需要使用单例模式来管理全局资源。通过单例模式,可以确保只有一个实例对资源进行管理和分配,提高系统的稳定性和性能。
  4. 全局状态管理:在鸿蒙应用开发中,经常需要全局唯一的实例来管理整个应用的配置和状态,如数据库访问对象等。通过使用单例模式,可以保证整个应用只有一个实例,避免重复实例造成的资源浪费和数据不一致。

程序设计

进入正题,众所周知,每当我们new一个实例的时候,内存中都会开辟一个新的空间,此时不同的实例是存在各自的内存空间中的。

{~4BNQY$TJJMY~`R0F0R@@C.png


对应内存示意图为:

%X[KHINZH%6@CPB5)1]$[JG.png

改造版本1

因为new天生的特性就会开辟新内存空间,因此我们改造的方向是不让用户通过new来创建实例。替换成静态方法的方式来创建

%REBC}Y%YE$TCV1J54@LZ71.png

核心代码在于 static getInstance 这里,它用过判断是否已经存在实例来决定是否要执行new操作

EQRW$~IJ0TDIO6F6D[[5G)B.png

对比结果:

`19U`[`VOD)KGP7~X[)_{AT.png

改造版本2

但是这个时候可能会有小伙伴忘记我们使用了单例模式了,它还是一样会通过new的方式创建对象

LY2NVQJ%7D}~X%E92[2FFE6.png

此时我们可以将 constructor 设置为 私有,这样当小伙伴new的时候,便会有一个语法错误提示

6[~_DU$H@)4S3SYJ%U7`CP0.png

ps: artTs中 不能 使用 new.target 来判断用户是否存在new的行为

完整代码

class Person {
  static instance: Person | null = null
  static getInstance() {
    if (!Person.instance) {
      Person.instance = new Person()
    }
    return Person.instance
  }
    // 设置方法为私有
    private  constructor() {   
  }
}
const p1 = Person.getInstance()
const p2 = Person.getInstance()
console.log("", p1 === p2)// true

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

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    42
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    46
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    53
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    37
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    61
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    56
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    40
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    49
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    105
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    75