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("我的滑板鞋!")

    通过控制实例化对象 保证只创建一个对象来调用函数方法
  • 相关阅读:
    12迭代器
    11(2)Vector(向量)
    11(1) LinkList ---链表
    11集合(Collection<E>) Arraylist
    10异常
    乘法计算过程的模拟
    10 Date详解
    详细的OA系统学习
    8 math类
    Java开发中的23种设计模式详解
  • 原文地址:https://www.cnblogs.com/tangda/p/10589953.html
Copyright © 2011-2022 走看看