zoukankan      html  css  js  c++  java
  • 单例例子以及应用场景

    '''
    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实例.
    """

    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    Json对象和Json字符串
    主界面的构造函数报错
    WPF DataGrid绑定的数据源更新后界面信息不更新
    WPF 数据绑定 ( 经验 )
    WPF 简单快速地去掉Button控件的边框
    字节数组与字符串形式的数字(序列号)之间的相互转换
    将十进制数字转换为字节数组
    WPF 调用线程无法访问此对象,因为另一个线程拥有该对象。
    cmd中一些命令
    Notepad++运行快捷键的设置
  • 原文地址:https://www.cnblogs.com/kknote/p/10970798.html
Copyright © 2011-2022 走看看