剑指offer(1) 设计模式

    科技2024-04-16  93

    """ 单例模式 1. 仅仅适合单线程模式的 2. 加锁适合多线程模式的 3. 对2 的优化 4. 是否可以使用 python特有语法方法设计。 5. 最好的方法 """ """ __new__ 的作用 是为一个类创造对象用的。 __init__ 的作用 是为一个创建好的对象赋值用的。 为什么我们在写类的时候只写__init 不写 __new__ 因为 我们仅仅需要对该对象赋值就行了 创建对象直接用继承父类的__new__就行了。 除非有特殊需求需要按照你的要求去创建对象,比如单例模式。 1.该模式为懒汉模式 懒汉模式:在类加载的时候不被初始化。 饿汉模式:在类加载时就完成了初始化,但是加载比较慢,获取对象比较快。 饿汉模式是线程安全的,在类创建好一个静态对象提供给系统使用,懒汉模式在创建对象时不加上synchronized,会导致对象的访问不是线程安全的。 2. 因此 该方案在多线程环境下需要加锁去保证线程安全 """ class SingleTon(object): _instance = {} def __new__(cls, *args, **kwargs): if cls not in cls._instance: cls._instance[cls] = super(SingleTon, cls).__new__(cls, *args, **kwargs) # print cls._instance return cls._instance[cls] # ---------------------------------------------------------------------------- """ 该模式 为饿汉模式 懒汉模式:在类加载的时候不被初始化。 饿汉模式:在类加载时就完成了初始化,但是加载比较慢,获取对象比较快。 饿汉模式是线程安全的,在类创建好一个静态对象提供给系统使用,懒汉模式在创建对象时不加上synchronized,会导致对象的访问不是线程安全的。 """ # 写一个单例模式类并创建一个静态对象。然后在对静态对象进行调用。 class SingleTon(object): def __init__(self, val): self.val = val single = SingleTon(2) a = single b = single print(a.val, b.val) print( a is b) a.val = 233 print( a.val, b.val)
    Processed: 0.014, SQL: 8