首页 > 技术文章 > 面向对象高阶-13单例模式实现

suren-apan 2019-09-21 10:56 原文

一丶什么是单例模式

单例是一种 设计模式 ,应用该模式的类只会生成一个实例。

设计模式?
用于解决某种固定问题的套路

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()

推荐阅读