面向對象高階-13單例模式實現

一丶什麼是單例模式

單例是一種 設計模式 ,應用該模式的類只會生成一個實例。python

設計模式?
用於解決某種固定問題的套路

MVC
MTV

二丶爲何用單例模式

單例是爲了節省 資源,當一個類的全部對象屬性所有相同時,則沒有必要建立多個對象設計模式

三丶實例的單例

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age


    def say_hi(self):
        print("hello im %s" % self.name)

    # 用於獲取對象的方法
    @staticmethod
    def get_instance():
        #判斷是否已經有了對象
        if hasattr(Person,"obj"):
            return getattr(Person,"obj")
        obj = Person("jack",18)
        Person.obj = obj
        print("new 了")
        return obj

p = Person.get_instance()
p.say_hi()


p2 = Person.get_instance()
p2.say_hi()

p3 = Person.get_instance()
p3.say_hi()

四丶單例元類

class Single(type):
    def __call__(self, *args, **kwargs):
        if hasattr(self,"obj"): #判斷是否存在已經有的對象
            return getattr(self,"obj") # 有就返回

        obj = super().__call__(*args,**kwargs) # 沒有則建立
        print("new 了")
        self.obj = obj # 並存入類中
        return obj


class Student(metaclass=Single):
    def __init__(self,name):
        self.name = name


class Person(metaclass=Single):
    pass

# 只會建立一個對象
Person()
Person()
相關文章
相關標籤/搜索