第五十二節,單例模式

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

相關文章
相關標籤/搜索