網(wǎng)站首頁 編程語言 正文
一、享元模式
享元,可理解為 Python
中的元類、最小粒度的類,系統(tǒng)中存在大量的相似對象時,可以選擇享元模式提高資源利用率。
享元具有兩種狀態(tài):
內(nèi)蘊狀態(tài):存儲在享元內(nèi)部,不會隨環(huán)境的改變而有所不同,是可以共享的。
外蘊狀態(tài):是不可以共享的,它隨環(huán)境的改變而改變的,因此外蘊狀態(tài)是由客戶端來保持(因為環(huán)境的變化是由客戶端引起的)。
二、應用場景
如果一個應用程序使用了大量的對象,而這些對象造成了很大的存儲開銷的時候就可以考慮是否可以使用享元模式。
例如:如果發(fā)現(xiàn)某個對象的生成了大量細粒度的實例,并且這些實例除了幾個參數(shù)外基本是相同的,如果把那些共享參數(shù)移到類外面,在方法調(diào)用時將他們傳遞進來,就可以通過共享大幅度單個實例的數(shù)目。
三、代碼示例
class FlyweightBase: ? ? """享元基類""" ? ? def offer(self): ? ? ? ? pass class Flyweight(FlyweightBase): ? ? """共享享元類""" ? ? def __init__(self, name): ? ? ? ? self.name = name ? ? def get_price(self, price): ? ? ? ? print('產(chǎn)品類型:{} 詳情:{}'.format(self.name, price)) class FactoryFlyweight: ? ? """享元工廠類""" ? ? def __init__(self): ? ? ? ? self.product = {} ? ? def Getproduct(self, key): ? ? ? ? if not 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")
原文鏈接:https://is-cloud.blog.csdn.net/article/details/122934432
相關推薦
- 2022-07-07 python?NetworkX庫生成并繪制帶權(quán)無向圖_python
- 2023-07-08 el-table-column重構(gòu)expand的樣式
- 2022-07-12 Git cherry-pick實現(xiàn)只復制某個commit
- 2022-06-29 python鏈表的基礎概念和基礎用法詳解_python
- 2022-02-12 使用background-attachment實現(xiàn)視差滾動、水波
- 2022-03-14 Failed to load ApplicationContext
- 2022-05-31 Windows下搭建Redis集群的方法步驟_Redis
- 2022-04-18 python?request?post?列表的方法詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支