004设计模式--单例模式(Singleton Pattern)

2022-12-14  本文已影响0人  _Cappuccino_

一、什么是单例模式

单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。

许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

单例的实现主要是通过以下两个步骤:

二、单例模式的结构

角色 含义
单例类 包含一个实例且能自行创建这个实例的类
访问类 使用单例的类

三、单例模式的代码实现

python实现
class Singleton(object):

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


class Test(Singleton):
    pass


t1 = Test()
t2 = Test()
print(t1 is t2)  # True
golang实现
package singleton
type singleton struct{}

var instance = &singleton{}
var once sync.Once

func GetSingleton() *singleton {
    once.Do(func() {
        singleton = &singleton{}
    })
    return singleton
}

四、单例模式的优缺点

优点
缺点

五、单例模式的应用场景

* 在我们的windows桌面上,我们打开了一个回收站,当我们试图再次打开一个新的回收站时,Windows系统并不会为你弹出一个新的回收站窗口。,也就是说在整个系统运行的过程中,系统只维护一个回收站的实例。这就是一个典型的单例模式运用。

* 网站的计数器,一般也是采用单例模式实现,如果你存在多个计数器,每一个用户的访问都刷新计数器的值,这样的话你的实计数的值是难以同步的。

* 线程的线程池的设计一般也是采用单例模式,这是由于线程池需要方便对池中的线程进行控制

* 对于一些应用程序的日志应用,或者web开发中读取配置文件都适合使用单例模式,如HttpApplication 就是单例的典型应用。
上一篇 下一篇

猜你喜欢

热点阅读