博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式实现的三种方式
阅读量:6703 次
发布时间:2019-06-25

本文共 2195 字,大约阅读时间需要 7 分钟。

1、什么是单例模式     单例模式:基于某种方法实例化多次得到实例是同一个 2、为何用单例模式     当实例化多次得到的对象中存放的属性都一样的情况,应该将多个对象指向同一个内存,即同一个实例 3、如何用 ''' # 单例模式实现方式一: # import settings # # class Mysql: #     __instacne=None # #     def __init__(self,ip,port): #         self.ip=ip #         self.port=port # #     @classmethod #     def from_conf(cls): #         if cls.__instacne is None: #             cls.__instacne=cls(settings.IP,settings.PORT) #         return cls.__instacne # # obj=Mysql('1.1.1.10',3306) # # obj1=Mysql.from_conf() # obj2=Mysql.from_conf() # obj3=Mysql.from_conf() # # print(obj1) # print(obj2) # print(obj3) # # obj4=Mysql('10.10.10.11',3307) # 单例模式实现方式二: # import settings # def singleton(cls): #     cls.__instance=cls(settings.IP,settings.PORT) #     def wrapper(*args,**kwargs): #         if len(args) == 0 and len(kwargs) == 0: #             return cls.__instance #         return cls(*args,**kwargs) #     return wrapper # # @singleton #Mysql=singleton(Mysql) #Mysql=wrapper # class Mysql: #     def __init__(self,ip,port): #         self.ip=ip #         self.port=port # # # obj1=Mysql() #wrapper() # obj2=Mysql() #wrapper() # obj3=Mysql() #wrapper() # print(obj1 is obj2 is obj3) # print(obj1) # print(obj2) # print(obj3) # obj4=Mysql('1.1.1.4',3308) # print(obj4) # 单例模式实现方式三: import settings class Mymeta(type):     def __init__(self,class_name,class_bases,class_dic): #self=Mysql         super(Mymeta,self).__init__(class_name,class_bases,class_dic )         self.__instance=self.__new__(self) #造出一个Mysql的对象         self.__init__(self.__instance,settings.IP,settings.PORT) #从配置文件中加载配置完成Mysql对象的初始化         # print(self.__instance)         # print(self.__instance.__dict__)     def __call__(self, *args, **kwargs): #self=Mysql         if len(args) == 0 and len(kwargs) == 0:             return self.__instance         obj=self.__new__(self)         self.__init__(obj,*args,**kwargs)         return obj class Mysql(object,metaclass=Mymeta): #Mysql=Mymeta(...)     def __init__(self,ip,port):         self.ip=ip         self.port=port obj1=Mysql() obj2=Mysql() obj3=Mysql() obj4=Mysql('10.10.10.11',3308) print(obj1) print(obj2) print(obj3) print(obj4)

转载于:https://www.cnblogs.com/fxc-520520/p/9256499.html

你可能感兴趣的文章
第4章 Keras入门
查看>>
手工修复ie浏览器
查看>>
BATJ互掐,哪家AI公司首先达到万亿美元市值? | 新智元AI技术峰会论坛
查看>>
hdu 1232 畅通工程 (并查集)
查看>>
MySql的用户权限
查看>>
java中finally和return的执行顺序
查看>>
Hibernate5-一对多双向关联-左外连接-HQL
查看>>
H3C防火墙出厂空配置管理口无法WEB登录
查看>>
使用NetWeaver创建数据库连接
查看>>
Spring事物、面向切面编程、依赖注入简介
查看>>
Java 中带参带返回值方法的使用
查看>>
开发中的各种时间格式转换(一)
查看>>
iSCSI安全之密码认证
查看>>
MySQL运维命令大全
查看>>
MySQL分区表(优化)
查看>>
linux定时任务crond那些事!
查看>>
mysql慢日志分析工具之mysqlsla学习笔记
查看>>
nginx基本配置与参数说明
查看>>
修改防火墙
查看>>
thinkphp中取部分字段用法
查看>>