测试开发面试题:单例的设计模式和应用场景

1908 篇文章 51 订阅
682 篇文章 1 订阅

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客文章浏览阅读3.3k次,点赞86次,收藏15次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502

单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式通常用于管理资源、配置或全局状态,例如数据库连接池、缓存和日志记录器。

解决的问题

单例模式解决以下问题:

  • 确保只有一个实例:单例模式保证在整个应用程序中只有一个实例,避免了资源浪费和数据不一致。

  • 提供全局访问点:单例模式提供一个全局访问点,方便访问该实例,而不需要每次都重新创建。

  • 控制实例的创建和销毁:单例模式可以控制实例的创建和销毁,例如在应用程序启动时创建实例,在应用程序关闭时销毁实例。

代码实现

以下是用 Python 代码实现单例模式的一个例子:

class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super().__new__(cls, *args, **kwargs)
        return cls._instance

# 测试逻辑
if __name__ == "__main__":
    # 创建两个实例
    obj1 = Singleton()
    obj2 = Singleton()

    # 判断是否为同一实例
    print(obj1 is obj2)  # 应该输出 True

执行结果:

True

代码思路

  1. 定义一个类 Singleton,其中包含一个类变量 _instance,用于存储类的唯一实例。

  2. 在 __new__ 方法中,首先检查类变量 _instance 是否为 None。如果 _instance 为空,说明尚未创建实例,则调用父类的 __new__ 方法创建一个新的实例,并将其赋值给 _instance。如果 _instance 不为空,说明已经存在实例,直接返回 _instance

  3. 在测试逻辑中,创建了两个 Singleton 的实例 obj1 和 obj2

  4. 由于单例模式的特性,obj1 和 obj2 应该是同一个实例,所以通过 obj1 is obj2 来判断它们是否相同。因为它们共享相同的 _instance,所以输出结果应该为 True

所以,整个代码的实现思路就是通过在 __new__ 方法中控制实例的创建,确保每次创建实例时都返回同一个实例,从而实现了单例模式。

单例模式应用场景

  • 资源管理:例如数据库连接池、缓存和日志记录器。

  • 配置管理:例如应用程序的配置文件。

  • 全局状态管理:例如当前登录的用户、应用程序的当前状态。

代码演示

以下是如何使用单例模式来管理数据库连接池的示例:

class DatabaseConnectionPool(Singleton):
    def __init__(self):
        super().__init__()
        self.connections = []

    def get_connection(self):
        if len(self.connections) == 0:
            # 创建新的连接
            connection = ...
            self.connections.append(connection)
        else:
            # 从连接池中获取连接
            connection = self.connections.pop()
        return connection

    def release_connection(self, connection):
        # 将连接放回连接池
        self.connections.append(connection)

# 使用数据库连接池
connection_pool = DatabaseConnectionPool()
connection = connection_pool.get_connection()
# 使用连接
...
connection_pool.release_connection(connection)

这段代码定义了一个 DatabaseConnectionPool 类,它继承自 Singleton 类,意味着 DatabaseConnectionPool 类是一个单例类,即整个程序中只会存在一个 DatabaseConnectionPool 的实例。

代码含义:

  1. DatabaseConnectionPool 类的 __init__ 方法初始化连接池对象,并初始化一个空列表 self.connections 用于存储数据库连接。

  2. get_connection 方法用于获取数据库连接。它首先检查连接池中是否有可用连接。如果连接池中没有连接,则创建一个新的连接,并将其添加到连接池中;如果连接池中有连接,则从连接池中取出一个连接并返回。

  3. release_connection 方法用于释放数据库连接。当连接不再使用时,可以调用这个方法将连接放回连接池中,以便其他代码可以再次使用它。

  4. 在程序中,首先创建了一个 DatabaseConnectionPool 的实例 connection_pool。然后,通过调用 connection_pool.get_connection() 方法,从连接池中获取一个数据库连接,并将其赋值给 connection 变量。

  5. 在使用连接后,调用 connection_pool.release_connection(connection) 方法,将连接放回连接池中,以便其他代码可以再次使用它。

总的来说,这段代码实现了一个简单的数据库连接池,通过单例模式确保了整个程序中只有一个连接池对象,而不会创建多个连接池对象。通过 get_connection 方法获取连接,通过 release_connection 方法释放连接,从而实现了连接的复用和管理。

总结

单例模式是一种常用的设计模式,它可以确保只有一个实例,并提供一个全局访问点。单例模式可以应用于各种场景,例如资源管理、配置管理和全局状态管理。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值