zoukankan      html  css  js  c++  java
  • Python中的单例设计模式

    1)设计模式:

         是前人工作的总结和提炼。通常,被人们广泛流传的设计模式。

        某一问题的特定解决方案,使用设计模式是为了可重用代码,是代码更容易被人理解, 增加代码的可用性。     

    2)单例设计模式:

        python解释器在执行对象的创建的时候,具体执行的操作为:为对象分配内存空间、为对象初始化。

    # 实例:实现多个对象创建相同的内存空间

    class  MusicPlayer(object):

        instance  =  None         # 设置类属性,用来判断是否有对象得到内存空间

        # 使用内置函数进行空间的分配

        def  __new__(cls,*args,**kwargs):

             # cls:哪个类调用,就传递哪个类;*args:元组参数;**kwargs:字典参数

             # 为对象分配内存

             if  cls.instance  ==  None:       # 空的时候,分配空间

                   cls.instance  =  object.__new__(cls)

             return  cls.instance   

        def  __init__(self):

             print  "初使化播放器"

    # 创建播放器对象

    player1  =  MusicPlayer()

    print  player1

    player2  =  MusicPlayer()

    print  palyer2

    # 注释:此时,对象player1和player2返回的内存地址是相同的

    3)单例模式的扩展:

    # 实例:实现多个对象分配空间,只分配一次;只初始化一次

    class  MusicPlayer(object):

        instance  =  None         # 设置类属性,用来判断是否有对象得到内存空间

        init_flag  =  0           # 0表示还没有初始化;1代表已经初始化

        # 使用内置函数进行空间的分配

        def  __new__(cls,*args,**kwargs):

             # cls:哪个类调用,就传递哪个类;*args:元组参数;**kwargs:字典参数

             # 为对象分配内存

             if  cls.instance  ==  None:       # 空的时候,分配空间

                   cls.instance  =  object.__new__(cls)

             return  cls.instance   

             # 把解释器的到的分配了空间的对象的引用,给对象的初始化方法

        def  __init__(self):

             if  MusicPlayer.init_flag  == 0: 

                   print  "初使化播放器"

                   MusicPlayer.init_flag  =  1

             else:

                   return        # 当已经初始化后,再执行就直接返回

    # 创建播放器对象

    player1  =  MusicPlayer()

    print  player1

    player2  =  MusicPlayer()

    print  palyer2

    # 注释:此时的两个对象,具有相同的内存地址,且只实例化了一次

     

  • 相关阅读:
    Offer快到碗里来,囊中之物-CAS
    SQL 两表一对多关联,主表某字段保存所有关联的id
    No Feign Client for loadBalancing defined
    Clean Code读书笔记 3--类
    Clean Code读书笔记(2)---函数
    Clean Code读书笔记(1)---有意义的命名
    [CF1354D] Multiset
    [CF1365E] Maximum Subsequence Value
    [CF1358D] The Best Vacation
    [CF463C] Gargari and Bishops
  • 原文地址:https://www.cnblogs.com/uthnb/p/9622861.html
Copyright © 2011-2022 走看看