码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式中的四种方式

时间:2018-08-28 23:55:35      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:int   不同   如何   turn   实例   实例化   div   模块   一个   

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

 

单例模式中的四种方式

标签:int   不同   如何   turn   实例   实例化   div   模块   一个   

原文地址:https://www.cnblogs.com/ageliu/p/9551409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!