单例模式中的四种方式

Posted ageliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式中的四种方式相关的知识,希望对你有一定的参考价值。

1、什么是单例模式?

单例模式指的是多种不同的实例化指向同一个实例

2、为何要去用单例模式?

使用单例模式是为了减少资源的浪费

3、如何去用单例模式?

方式一:

#先写一个setting模块用来存放(ip=None,port=None)
import setting
class mysql:
    __instance=None
    def __init__(self,ip,port):
        self.ip=ip
        self.port=port
    @classmethod
    def srea(cls):
        if cls.__instance is None:
            cls.__instance=cls(setting.ip,setting.port)
        return cls.__instance
obj=Mysql.srea()
obj1=Mysql(1.1.1.1,203)
print(obj)
print(obj1)

方式二:

先写一个setting模块用来存放(ip=None,port=None)
import setting
def atuh(cls):
    _instance=cls(setting.ip,setting.port)
    def warpper(*args,**kwargs):
        if args or kwargs:
            obi=cls(*args,**kwargs)
            return obi
        return _instance
    return warpper
@atuh
class Mysql:
    def __init__(self,ip,port):
        self.ip=ip
        self.port=port
obj=Mysql()
obj1=Mysql()
obj2=Mysql(1.1.1.1,2206)
print(obj)
print(obj1)
print(obj2)

方式三:

先写一个setting模块用来存放(ip=None,port=None)
import setting
class Mymeta(type):
    def __init__(self,mysql,mysql_obj,mysql_dic):
        self._instance=self(setting.ip,setting.port)
    def __call__(self, *args, **kwargs):
        if args or kwargs:
            obj=self.__new__(self)
            self.__init__(obj,*args,**kwargs)
            return obj
        else:
            return self._instance
class Mysql(metaclass=Mymeta):
    def __init__(self,ip,port):
        self.ip=ip
        self.port=port
obj=Mysql()
obj1=Mysql()
obj2=Mysql(1.1.1.3,2206)
print(obj)
print(obj1)
print(obj2)

方式四:

先写一个setting模块用来存放(ip=None,port=None)再写一个song模块
song模块的代码如下:class Mysql:
    def __init__(self,ip,port):
        self.ip=ip
        self.port=port
instance=Mysql(1.1.1.1,2206)
主题代码吐下:
def f():
    from song import instance
    print(instance)
def f2():
    from song import instance, Mysql
    odj=Mysql(1.1.1.1,2206)
    print(odj)
f()
f2()

 

以上是关于单例模式中的四种方式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式的四种实现方式

单例模式的四种方式

python全栈开发补充单例模式的四种方式

Java单例模式的四种写法

Activity的四种加载模式

Activity的四种加载模式