本文實例講述了Python設(shè)計模式之享元模式原理與用法。分享給大家供大家參考,具體如下:
享元模式(Flyweight Pattern):運用共享技術(shù)有效地支持大量細(xì)粒度的對象.
下面是一個享元模式的demo:
#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ = 'Andy'"""大話設(shè)計模式設(shè)計模式——享元模式享元模式(Flyweight Pattern):運用共享技術(shù)有效地支持大量細(xì)粒度的對象對一個類進(jìn)行的實例,只在第一次使用時建立,其他時候是用同一個實例,減少內(nèi)存的開銷"""# 抽象網(wǎng)站類class Website(object): def use(self): pass# 具體網(wǎng)站類class ConcreteWebsite(Website): def __init__(self, name): self.name = name def use(self): print "網(wǎng)站分類",self.name# 不共享的網(wǎng)站類class UnshareConcreteWebsite(Website): def __init__(self, name): self.name = name def use(self): print "不共享網(wǎng)站分類",self.name# 網(wǎng)站工廠class WebsiteFactory(object): def __init__(self): self.hashtable = dict() # 獲取網(wǎng)站類 如果存在直接返回,如果不存在建好之后返回 def get_website(self, key): if not key in self.hashtable: self.hashtable[key] = ConcreteWebsite(key) return self.hashtable[key] # 網(wǎng)站實例的個數(shù) 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()運行結(jié)果:

上面類的設(shè)計如下圖:

享元模式可以避免大量非常相似類的開銷,在程序設(shè)計中,有時會生成大量細(xì)粒度的類實例來表示數(shù)據(jù),如果這些實例除了幾個參數(shù)外基本相同,就可以把參數(shù)已到實例外面,在方法調(diào)用時,把它們傳進(jìn)來,就可以通過共享大幅度減少單個實例的數(shù)目
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
新聞熱點
疑難解答