• 单例例子以及应用场景


    '''
    1.实现__new__方法
    2.并将一个类的实例绑定到类变量_instance上
    3.如果cls._instance为None说明该类还没有实例化过,实例化该类,并返回
    4.如果cls._instance不为None,直接返回cls._instance
    5.super(Singleton, cls)是object的意思
    '''

    class Singleton(object):
    ....def new(cls, *args, **kw):
    ........if not hasattr(cls, '_instance'):
    ............# orig = super(Singleton, cls)
    ............# cls._instance = orig.new(cls, *args, **kw)
    ............cls._instance = object.new(cls, *args, **kw) #等价上二行
    ........return cls._instance

    class MyClass(Singleton):
    ....a = 1

    one = MyClass()
    two = MyClass()

    two.a = 3
    print(one.a)
    3
    one和two完全相同,可以用id(), ==, is检测
    print(id(one))
    29097904
    print(id(two))
    29097904
    print(one == two)
    True
    print(one is two)
    True

    """
    单例模式的应用场景:

    1. Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windows task manager吗? 不信你自己试试看哦~
    2. windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
    3. 网站的计数器,一般也是采用单例模式实现,否则难以同步。
    4. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
    5. Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
    6. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
    7. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
    8. 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
    9. HttpApplication 也是单位例的典型应用。熟悉ASP.Net

    (IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式,所有的HttpModule都共享一个HttpApplication实例.
    """

  • 相关阅读:
    python安装及写一个简单的验证码组件(配合node)
    babel基本用法
    markdown最基本的几种语法
    为什么循环引用会导致“内存泄漏”
    node爬虫进阶版
    算法入门--快速排序
    拓扑排序 --- 判断是否有回路
    拓扑排序 --- 模板题
    数论 --- 找规律
    数论 --- 简单题
  • 原文地址:https://www.cnblogs.com/kknote/p/16103509.html
Copyright © 2020-2023  润新知