zoukankan      html  css  js  c++  java
  • 单例

    单例模式
    一种设计模式,MVVM MVC MTV
    常推荐书籍常见设计模式

    要保证一个类只能有一个实例(单例)

    为什么这么设计?
    目的是为了节省内存开销
    如果两个对象的数据一模一样 就没有必要创建新对象 直接使用已有的即可

    场景:
    当一个类的所有实例数据都完全相同时 则应该设计为单例
    音乐播放器类 实例化产生播放器对象

    单例的实现方式:
    自定义元类 覆盖__call__ 添加判断逻辑 保证只能实例化一个对象

    """
    class MySingleton(type):
    obj = None
    def __call__(self, *args, **kwargs):
    if not self.obj:
    # 创建空对象
    obj = object.__new__(self)
    # 调用初始化方法
    self.__init__(obj, *args, **kwargs)
    self.obj = obj
    return self.obj


    class Player(metaclass=MySingleton):
    # 默认为空
    obj = None

    def __init__(self):
    print("创建了一个播放器对象....")

    def play(self,path):
    self.stop()
    print("playing...",path)

    def stop(self):
    print("stop music")

    # 用于获取播放器对象
    @classmethod
    def get_player(cls):
    if not cls.obj:
    print("创建播放器...")
    cls.obj = cls()
    return cls.obj
    p1 = Player.get_player()
    p1.play("爱你一万年1.")


    p2 = Player.get_player()
    p2.play("爱你一万年2.")

    Player().play("我的滑板鞋!")

    通过控制实例化对象 保证只创建一个对象来调用函数方法
  • 相关阅读:
    在HTML网页中巧用URL
    技术不是第一位,商业模式是第一位[转帖]
    SQL Server日期计算
    Ms XmlDom 异步装载Xml文件
    陆游词全集
    陈慧娴 3 In 1 MV珍藏集
    下大雪啦
    用Asp+XmlHttp实现RssReader功能
    双绞线的标准接法
    巧把Hotmail邮箱2M轻易扩容到25M
  • 原文地址:https://www.cnblogs.com/tangda/p/10589953.html
Copyright © 2011-2022 走看看