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