看得懂的设计模式 享元模式python3 最基本(简单)实现
在考量系統(tǒng)內(nèi)存合理使用時,通過享元模式可降低性能壓力以及降低資源占用;主要實現(xiàn)是通過共享數(shù)據(jù)這一思想實現(xiàn)資源的合理分配。
在開發(fā)項目時,很多情況下會存在過多的相似對象,該對象有相同的共同點,該共同點在程序設(shè)計時,可歸為共享數(shù)據(jù),不同點可以通過其它方式進行傳遞賦值。
例如做一個瓶子,盤子外觀都是相同的,只有內(nèi)部數(shù)據(jù)不同,這個時候假設(shè)通過常規(guī)方式新建不同的對象,該對象的資源分配是不合理的。
假設(shè)產(chǎn)品有礦泉水,只有外包裝顏色不同,這時就可以使用享元模式。
實現(xiàn)如下,首先新建一個礦泉水類:
objpool = dict():礦泉水類中,定義了一個objpool 作為一個記錄對象的池(字典)
def show(self, color):輸出當(dāng)前對象名以及可變屬性顏色
def __new__(cls, type):使用new方法在實例化之前創(chuàng)建對象
obj_ = cls.objpool.get(type, None):在對象池中找到當(dāng)前類型的對象,沒找到則為None
if obj_ == None: :對象找不到則開始初始化對象,并且把當(dāng)前類型對象存入到記錄池中
obj_.name = type:把type賦值給當(dāng)前name屬性,以便之后進行輸出顯示
最后返回對象 obj_。
經(jīng)過以上類的編寫后,實例化對象,并且查看池中存儲了多少個對象:
t1 = BottledWater("礦泉水") t1.show('紅色') t2 = BottledWater("礦泉水") t2.show('藍色') t3 = BottledWater("礦泉水") t3.show('綠色') print('\n') t1_ = BottledWater("冰紅茶") t1_.show('紅色') t2_ = BottledWater("冰紅茶") t2_.show('藍色') t3_ = BottledWater("冰紅茶") t3_.show('綠色')print('對象一共有:',len(BottledWater.objpool))在未使用享元模式前,以上新建對象的方法應(yīng)該會新建出6個對象,但是輸出顯示為2個:
因為類型一個為礦泉水另外一個為冰紅茶,兩者之間是兩個種類;礦泉水新建對象后是共享數(shù)據(jù),不同顏色是可變數(shù)據(jù),冰紅茶與礦泉水是兩種不同類型,最后使用len計算池 objpool 長度,判斷類的多少,對象總數(shù)為2。
完整代碼如下:
總結(jié)
以上是生活随笔為你收集整理的看得懂的设计模式 享元模式python3 最基本(简单)实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看得懂的外观设计模式 python3 实
- 下一篇: Qt 第一步 HelloWorld 的第