元,可理解為python中的元類、最小粒度的類,系統中存在大量的相似物件時,可以選擇享元模式提高資源利用率。
# -*- coding:utf-8 -*-
class
flyweightbase:
defoffer
(self):
"""享元基類"""
pass
class
flyweight
(flyweightbase):
"""共享享元類"""
def__init__
(self, name):
self.name = name
defget_price
(self, price):
print('產品型別:{} 詳情:{}'.format(self.name, price))
class
factoryflyweight:
"""享元工廠類"""
def__init__
(self):
self.product = {}
defgetproduct
(self, key):
ifnot self.product.get(key, none):
self.product[key] = flyweight(key)
return self.product[key]
if __name__ == '__main__':
test = factoryflyweight()
a = test.getproduct("高階")
a.get_price("香水:80")
b = test.getproduct("高階")
b.get_price("**:800")
產品型別:高階 詳情:香水:80
產品型別:高階 詳情:**:800
在這個案例中共享了**過程的類flyweight,同一種產品型別的**過程只會例項化一次,這就是享元模式最核心的要義:共享業務邏輯上的最小單元。
內蘊狀態儲存在享元內部,不會隨環境的改變而有所不同,是可以共享的。
外蘊狀態是不可以共享的,它隨環境的改變而改變的,因此外蘊狀態是由客戶端來保持(因為環境的變化是由客戶端引起的)。
如果乙個應用程式使用了大量的物件,而這些物件造成了很大的儲存開銷的時候就可以考慮是否可以使用享元模式。
例如,如果發現某個物件的生成了大量細粒度的例項,並且這些例項除了幾個引數外基本是相同的,如果把那些共享引數移到類外面,在方法呼叫時將他們傳遞進來,就可以通過共享大幅度單個例項的數目。
設計模式學習(十)享元模式
工廠類,返回乙個 如果沒有就建立乙個,並放到池中 public class websitefactory return website map.get type 獲取 分類的總數 池中有多少個 型別 public intgetwebsitecount 抽象方法 public abstract cla...
Python設計模式 享元模式
基於python3.5.2,如下 coding utf 8 class coffee name price 0 def init self,name self.name name self.price len name defshow self print coffee name s price s...
python設計模式 享元模式
享元模式定義是它使用共享物件,用來盡可能減少記憶體使用量以及分享資訊給盡可能多的相似物件 它適合用於只是因重複而導致使用無法令人接受的大量記憶體的大量物件。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部資料結構,當需要使用時再將它們傳遞給享元 從享元模式定義來看,跟單例模式有相同之處,單例...