本文實例講述了Python設計模式之享元模式原理與用法。分享給大家供大家參考,具體如下:
享元模式(Flyweight Pattern):運用共享技術有效地支持大量細粒度的對象.
下面是一個享元模式的demo:
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大話設計模式 設計模式——享元模式 享元模式(Flyweight Pattern):運用共享技術有效地支持大量細粒度的對象 對一個類進行的實例,只在第一次使用時建立,其他時候是用同一個實例,減少內存的開銷 """ # 抽象網站類 class Website(object): def use(self): pass # 具體網站類 class ConcreteWebsite(Website): def __init__(self, name): self.name = name def use(self): print "網站分類",self.name # 不共享的網站類 class UnshareConcreteWebsite(Website): def __init__(self, name): self.name = name def use(self): print "不共享網站分類",self.name # 網站工廠 class WebsiteFactory(object): def __init__(self): self.hashtable = dict() # 獲取網站類 如果存在直接返回,如果不存在建好之后返回 def get_website(self, key): if not key in self.hashtable: self.hashtable[key] = ConcreteWebsite(key) return self.hashtable[key] # 網站實例的個數 def get_website_count(self): return len(self.hashtable.keys()) if __name__ == "__main__": factory = WebsiteFactory() f1 = factory.get_website("blog") f2 = factory.get_website("blog") f3 = factory.get_website("blog") f4 = factory.get_website("website") f5 = factory.get_website("website") f6 = factory.get_website("website") f7 = UnshareConcreteWebsite("test") f1.use() f2.use() f3.use() f4.use() f5.use() f6.use() f7.use()
運行結果:
上面類的設計如下圖:
享元模式可以避免大量非常相似類的開銷,在程序設計中,有時會生成大量細粒度的類實例來表示數據,如果這些實例除了幾個參數外基本相同,就可以把參數已到實例外面,在方法調用時,把它們傳進來,就可以通過共享大幅度減少單個實例的數目
更多關于Python相關內容可查看本站專題:《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。