Java 中创建设计模式的完整指南:单例模式

Java 中创建设计模式的完整指南:单例模式

什么是设计模式?

软件设计模式是针对软件设计中给定上下文中常见问题的通用、可重用解决方案。

我为什么要学习模式?

无需重新发明轮子,让生活更简单

  1. 工具箱 久经考验 软件设计中常见问题的解决方案。
  2. 定义团队和组织之间的通用语言,以解决与技术进步相关的新问题。
  3. 开始理解库和语言中的模式。

图案分类

创造的

结构

行为的

创作型设计模式有 5 种主要类型:

  1. 建造者
  2. 原型
  3. 辛格尔顿
  4. 工厂
  5. 抽象工厂

在本文中,我们将详细介绍一种创建模式—— 单例设计模式。

用法:

确保一个类只有一个实例并提供对该实例的全局访问。

当需要一个对象来协调整个系统的操作时很有用。

存在的问题:

有时我们需要一个并且只有一个类的实例。

为什么 ?

只需要实例化一次并且可以在整个程序中重用的实例。

示例——记录器、数据库连接、驱动程序、配置等。

单例模式如何提供帮助?

  • 通过将默认构造函数设为私有来隐藏构造函数。
  • 提供一个 静态方法 返回一个 参考 到实例。

不同的方法:

以下是可以实现此模式的 4 种不同方式。

经典方式——或惰性实例化

添加同步关键字以使线程安全

渴望实例化

双重检查锁定

让我们一一了解上述每种方法。

经典实现:

下面是实现延迟实例化的示例代码。

除非调用 getInstance() 方法,否则不会初始化实例。
上面描述的技术在单线程上下文中是有效的,但它可能会导致问题 多线程环境 如果多个线程在 if 条件内同时运行。 单例模式将被破坏 ,因此两个线程都将接收到单例类的不同实例。

线程安全的单例:

使用 'synchronized' 关键字确保一次只有一个线程可以执行 getInstance()。

这种方法的主要缺点是每次创建单例对象时都使用同步 昂贵的 并且可能 降低性能 你的程序。

渴望实例化:

创建单例类的最简单方法。

Singleton Class 的实例是在类加载时创建的。

这不被认为是一种“好的”做法,因为除非客户端调用,否则我们不应该事先创建任何实例。

除非我们确定在整个程序中都使用了这个实例,否则我们应该避免使用这种模式。

双重检查锁定:

不要使用同步方法,而是在代码中使用同步块。

当对象为空时,我们可以在 getInstance() 方法上获取锁。

减少每次调用同步方法的开销。

推荐阅读的书籍:

  1. 头部优先设计模式

2. 设计模式:可重用的面向对象软件的要素

3. Head First 面向对象分析与设计

如果您喜欢这篇文章,请点击几次“拍手”按钮。

给了我足够的动力来发布更多这样的内容。请与您认为本文可能有帮助的朋友分享。

跟着我 瓦尔沙达斯 接收我的每周文章。

联系我—— 瓦尔沙达斯 | 领英

谢谢阅读。

快乐学习!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/36894/54011609

posted @ 2022-09-16 09:54  哈哈哈来了啊啊啊  阅读(30)  评论(0编辑  收藏  举报