單列模式就是一個類只建立一個對象便可完成須要的功能,每建立一個對象,內存裏就會多一個對象,單列模式就是相同的數據到一個對象裏去獲取,減小佔用內存空間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