zoukankan      html  css  js  c++  java
  • 单例模式装饰器

    装饰器是什么,装饰器就一函数而已。

    但此函数的参数与常规函数不同,此函数的参数是一个函数对象。常规函数的参数一般是字符串 数字什么的。

    函数的参数可以是一个函数,也可以是一个类。

     1 #coding=utf8
     2 from functools import wraps
     3 
     4 
     5 def singleton(cls):
     6     print cls
     7     instances = {}
     8     @wraps(cls)
     9     def getinstance(*args, **kw):
    10         if cls not in instances:
    11             instances[cls] = cls(*args, **kw)
    12         return instances[cls]
    13     return getinstance
    14 
    15 
    16 @singleton
    17 class MyClass(object):
    18     a = 1
    19 
    20 m1=MyClass()
    21 m2=MyClass()
    22 
    23 print m1 is m2

     singleton(MyCalss)的结果是 第13行的 getinstance,MyClass指向getinstance

    getinstance是一个函数。

    MyClass()  就是 getinstance()了。

    getinstance()的结果是第12行.

    当类成员instances这个字典中没有 MyClass键的时候,那么创建一个键值对,键是MyClass,值是MyClass()。当有MyClass键的时候,返回字典中的MyClass键的值。

    说白了是闭包加强版,外层传了一个参数,参数是一个函数或类。

    只要把这个装饰器加到任意一个类,那么那个类就是单例模式的类。

  • 相关阅读:
    单例模式
    说说抽象类接口
    闲说多态
    理解C#中的继承
    可变个数的形参的方法
    java 关键字
    数组的常见异常
    内存的基本结构 图片
    Java中的名称命名规范:
    死锁的例子 代码练习
  • 原文地址:https://www.cnblogs.com/ydf0509/p/8311026.html
Copyright © 2011-2022 走看看