Python中面向对象之单例设计模式

# 面向对象的单例设计模式


# 普通模式
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
obj1 = Person('小明',20)
obj2 = Person('小红',25)
obj3 = Person('小蓝',30)
print(id(obj1),id(obj2),id(obj3))  # 输出==>53414896 53414928 53415024
# 单例模式
# 实现方式:
# 1.创建一个类静态字段(类变量)__instance
# 2.创建一个类方法,判断__instance是否存在,不存在则将对象赋值给__instance,即__instance = 类();如果存在,则直接调用返回__instance,这样创建的对象地址都是一样的

class Foo:
    __v = None
    def __init__(self):
        pass
    @classmethod
    def get__instance(cls):
        if cls.__v:
            return cls.__v
        else:
            cls.__v = Foo()
            return cls.__v
obj4 = Foo.get__instance()
obj5 = Foo.get__instance()
obj6 = Foo.get__instance()
print(id(obj4),id(obj5),id(obj6))  # 输出 ==> 53415056 53415056 53415056

# 当业务并发量很大的时候,按照以往的模式,一个请求创建一个对象,就会创建一个新的空间,如果同时创建了三个对象,比如
# obj1,obj2,obj3,他们实现了相同的功能(通过person实例化出来的一个对象,拥有同样的属性和方法,只有名字不一样),这样会造成
# 内存和进程的浪费。为了解决这个问题(问题:让这些拥有相同方法的对象都有同样的内存地址)于是产生了单例模式。
#通过单例模式制造出来的对象拥有相同的地址。

猜你喜欢

转载自blog.csdn.net/qq_35208583/article/details/88971349