博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第五十二节,单例模式
阅读量:6036 次
发布时间:2019-06-20

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

单列模式就是一个类只创建一个对象即可完成需要的功能,每创建一个对象,内存里就会多一个对象,单列模式就是相同的数据到一个对象里去获取,减少占用内存空间

需要创建多个对象,每个对象里封装了不同数据时,不适应单列模式

不适合单列模式

#!/usr/bin/env python# -*- coding:utf8 -*-class a:    def __init__(self, k, v):#接收对象传值,并把接收到的值封装成对象普通字段        self.k1 = k #封装普通字段        self.v1 = v #封装普通字段    def f1(self):        passb = a("小明","20岁")#创建对象并且传值print(b.k1,b.v1)c = a("小张","25岁")#创建对象并且传值print(c.k1,c.v1)e = a("小赵","25岁")#创建对象并且传值print(e.k1,e.v1)# 输出# 小明 20岁# 小张 25岁# 小赵 25岁

 

单列模式适应场景,当所有对象中封装的普通字段都相同时就适合用单列模式

#!/usr/bin/env python# -*- coding:utf8 -*-class a:    def __init__(self, k):#接收对象传值,并把接收到的值封装成对象普通字段        self.k1 = k #封装普通字段    def f1(self):        print(self.k1,"的体重")    def f2(self):        print(self.k1,"的身高")    def f3(self):        print(self.k1,"的年龄")b = a("小明")#创建对象并且传值b.f1() #执行f1方法b.f2() #执行f2方法b.f3() #执行f3方法# 输出# 小明 的体重# 小明 的身高# 小明 的年龄

 

单列模式数据库连接池原理1

#!/usr/bin/env python# -*- coding:utf8 -*-"""单列模式数据库连接池原理"""class Sqlpool:    def __init__(self):        self.ip = "192.168.1.1"        self.port = 3306        self.pwd = "1234488"        self.username = "xxxxxx"        #去链接数据库        self.lj = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #假如创建了9个链接数据库的线    def hqlj(self):        #获取链接        import random #导入随机模块        r = random.randrange(1,11) #创建一个1到10的随机数        return r #返回随机数a = Sqlpool() #创建对象for i in range(10): #创建10个循环,假如有10个人访问,每个人随机链接一条线    print("去连接池",a,"中获取一个链接")    b = a.hqlj()    print("获取到的链接是:",b)# 输出# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 6# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 5# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 6# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 3# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 9# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 1# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 1# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 5# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 9# 去连接池 <__main__.Sqlpool object at 0x0000005F74ED7780> 中获取一个链接# 获取到的链接是: 7

 

单列模式数据库连接池原理2【推荐】

通过静态方法+静态字段实现单列模式

#!/usr/bin/env python# -*- coding:utf8 -*-"""单列模式数据库连接池原理"""class Sqlpool:    __danl = None #创建一个静态字段    def __init__(self):        #封装数据库链接需要的信息        self.ip = "192.168.1.1"        self.port = 3306        self.pwd = "1234488"        self.username = "xxxxxx"        #去链接数据库        self.lj = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #假如创建了9个链接数据库的线    @staticmethod #创建一个静态方法    def duix():        if Sqlpool.__danl: #判断静态字段是否有值            return Sqlpool.__danl #如果有值返回静态字段的值        else:            Sqlpool.__danl = Sqlpool() #如果没有值创建一个类对象赋值给静态字段            return Sqlpool.__danl #赋值给静态字段后返回静态字段的值#这样,无论创建多少个访问,对象时,都是一个对象,这样不会占用内存a = Sqlpool.duix() #创建一个访问对象print("打印对象地址", a)b = Sqlpool.duix() #创建二个访问对象print("打印对象地址", b)c = Sqlpool.duix() #创建三个访问对象print("打印对象地址", c)# 输出# 打印对象地址 <__main__.Sqlpool object at 0x000000DCF56177B8># 打印对象地址 <__main__.Sqlpool object at 0x000000DCF56177B8># 打印对象地址 <__main__.Sqlpool object at 0x000000DCF56177B8>

 

单列模式总结:列模式就是相同的数据到一个对象里去获取,减少占用内存空间

转载地址:http://oulhx.baihongyu.com/

你可能感兴趣的文章
一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-涉及的数据定义
查看>>
分别写出有符号和无符号1字节,2字节,4字节所能表示的整数范围
查看>>
告别纯烧钱运营模式 “生态充返”打响易到生态化反第一战
查看>>
linux内核的优先级继承协议(pip)和μC/OSII 2.52内核的优先级置顶协议(pcp)
查看>>
用HAproxy+keepalived+mysql Replication 构建基于企业级负载均衡
查看>>
安全扫描器工具
查看>>
IIS日志删除脚本
查看>>
一道shell题,perl解法
查看>>
只允许特定的组用户su切换到root
查看>>
Win7中用Windows Photo Viewer打印图片
查看>>
也许Delphi就这样远去
查看>>
cvsacl 控制cvs的用户权限
查看>>
Fork 系统炸弹
查看>>
科普系列之-使用Windows的NTFS保护你的敏感数据
查看>>
Windows Phone 实用开发技巧(28):图片缓存
查看>>
Weave Scope 容器地图 - 每天5分钟玩转 Docker 容器技术(80)
查看>>
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
查看>>
在RHEL5下构建LAMP网站服务平台之编译安装Apache与配置基于域名的虚拟Web主机
查看>>
citrix的XenAPP虚拟ip池
查看>>
Mangos 研究-编译工作(二)
查看>>