单列模式就是一个类只建立一个对象便可完成须要的功能,每建立一个对象,内存里就会多一个对象,单列模式就是相同的数据到一个对象里去获取,减小占用内存空间python
须要建立多个对象,每一个对象里封装了不一样数据时,不适应单列模式数据库
不适合单列模式dom
#!/usr/bin/env python # -*- coding:utf8 -*- class a: def __init__(self, k, v):#接收对象传值,并把接收到的值封装成对象普通字段 self.k1 = k #封装普通字段 self.v1 = v #封装普通字段 def f1(self): pass b = 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岁
单列模式适应场景,当全部对象中封装的普通字段都相同时就适合用单列模式ui
#!/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方法 # 输出 # 小明 的体重 # 小明 的身高 # 小明 的年龄
单列模式数据库链接池原理1spa
#!/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【推荐】code
经过静态方法+静态字段实现单列模式对象
#!/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>
单列模式总结:列模式就是相同的数据到一个对象里去获取,减小占用内存空间blog