Java 中创建设计模式的完整指南:单例模式
Java 中创建设计模式的完整指南:单例模式
什么是设计模式?
软件设计模式是针对软件设计中给定上下文中常见问题的通用、可重用解决方案。
我为什么要学习模式?
无需重新发明轮子,让生活更简单
- 工具箱 久经考验 软件设计中常见问题的解决方案。
- 定义团队和组织之间的通用语言,以解决与技术进步相关的新问题。
- 开始理解库和语言中的模式。
图案分类
创造的
结构
行为的
创作型设计模式有 5 种主要类型:
- 建造者
- 原型
- 辛格尔顿
- 工厂
- 抽象工厂
在本文中,我们将详细介绍一种创建模式—— 单例设计模式。
用法:
确保一个类只有一个实例并提供对该实例的全局访问。
当需要一个对象来协调整个系统的操作时很有用。
存在的问题:
有时我们需要一个并且只有一个类的实例。
为什么 ?
只需要实例化一次并且可以在整个程序中重用的实例。
示例——记录器、数据库连接、驱动程序、配置等。
单例模式如何提供帮助?
不同的方法:
以下是可以实现此模式的 4 种不同方式。
经典方式——或惰性实例化
添加同步关键字以使线程安全
渴望实例化
双重检查锁定
让我们一一了解上述每种方法。
经典实现:
下面是实现延迟实例化的示例代码。
除非调用 getInstance() 方法,否则不会初始化实例。
上面描述的技术在单线程上下文中是有效的,但它可能会导致问题 多线程环境 如果多个线程在 if 条件内同时运行。 单例模式将被破坏 ,因此两个线程都将接收到单例类的不同实例。
线程安全的单例:
使用 'synchronized' 关键字确保一次只有一个线程可以执行 getInstance()。
这种方法的主要缺点是每次创建单例对象时都使用同步 昂贵的 并且可能 降低性能 你的程序。
渴望实例化:
创建单例类的最简单方法。
Singleton Class 的实例是在类加载时创建的。
这不被认为是一种“好的”做法,因为除非客户端调用,否则我们不应该事先创建任何实例。
除非我们确定在整个程序中都使用了这个实例,否则我们应该避免使用这种模式。
双重检查锁定:
不要使用同步方法,而是在代码中使用同步块。
当对象为空时,我们可以在 getInstance() 方法上获取锁。
减少每次调用同步方法的开销。
推荐阅读的书籍:
- 头部优先设计模式
2. 设计模式:可重用的面向对象软件的要素
3. Head First 面向对象分析与设计
如果您喜欢这篇文章,请点击几次“拍手”按钮。
给了我足够的动力来发布更多这样的内容。请与您认为本文可能有帮助的朋友分享。
跟着我 瓦尔沙达斯 接收我的每周文章。
谢谢阅读。
快乐学习!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明