Python設(shè)計(jì)模式之享元模式原理與用法實(shí)例分析
本文實(shí)例講述了Python設(shè)計(jì)模式之享元模式原理與用法。分享給大家供大家參考,具體如下:
享元模式(Flyweight Pattern):運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象.
下面是一個(gè)享元模式的demo:
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大話設(shè)計(jì)模式 設(shè)計(jì)模式——享元模式 享元模式(Flyweight Pattern):運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象 對(duì)一個(gè)類進(jìn)行的實(shí)例,只在第一次使用時(shí)建立,其他時(shí)候是用同一個(gè)實(shí)例,減少內(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í)例的個(gè)數(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()
運(yùn)行結(jié)果:
上面類的設(shè)計(jì)如下圖:
享元模式可以避免大量非常相似類的開銷,在程序設(shè)計(jì)中,有時(shí)會(huì)生成大量細(xì)粒度的類實(shí)例來表示數(shù)據(jù),如果這些實(shí)例除了幾個(gè)參數(shù)外基本相同,就可以把參數(shù)已到實(shí)例外面,在方法調(diào)用時(shí),把它們傳進(jìn)來,就可以通過共享大幅度減少單個(gè)實(shí)例的數(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)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python?kornia計(jì)算機(jī)視覺庫實(shí)現(xiàn)圖像變化
這篇文章主要為大家介紹了python?kornia計(jì)算機(jī)視覺庫實(shí)現(xiàn)圖像變化算法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01python中__call__內(nèi)置函數(shù)用法實(shí)例
這篇文章主要介紹了python中__call__內(nèi)置函數(shù)用法,實(shí)例分析了python中__call__內(nèi)置函數(shù)的原理與使用技巧,需要的朋友可以參考下2015-06-06Python數(shù)據(jù)可視化之Pyecharts使用詳解
Pyecharts是一個(gè)由百度開源的、用于生成Echarts圖表的類庫,可以用來進(jìn)行數(shù)據(jù)可視化分析。本文將詳細(xì)講解一下Pyecharts的使用,需要的可以參考一下2022-04-04python中pandas.DataFrame對(duì)行與列求和及添加新行與列示例
pandas是python環(huán)境下最有名的數(shù)據(jù)統(tǒng)計(jì)包,而DataFrame翻譯為數(shù)據(jù)框,是一種數(shù)據(jù)組織方式,這篇文章主要給大家介紹了python中pandas.DataFrame對(duì)行與列求和及添加新行與列的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03Python數(shù)據(jù)分析:pandas中Dataframe的groupby與索引用法
這篇文章主要介紹了pandas中Dataframe的groupby與索引用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02