博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python设计模式(十):享元模式
阅读量:6685 次
发布时间:2019-06-25

本文共 1110 字,大约阅读时间需要 3 分钟。

元,可理解为python中的元类、最小粒度的类,系统中存在大量的相似对象时,可以选择享元模式提高资源利用率。

# -*- coding:utf-8 -*- class FlyweightBase:     def offer(self):         """享元基类"""         pass class Flyweight(FlyweightBase):     """共享享元类"""     def __init__(self, name):         self.name = name     def get_price(self, price):         print('产品类型:{} 详情:{}'.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") 产品类型:高端 详情:香水:80 产品类型:高端 详情:面膜:800

在这个案例中共享了报价过程的类Flyweight,同一种产品类型的报价过程只会实例化一次,这就是享元模式最核心的要义:共享业务逻辑上的最小单元。

两个状态:

内蕴状态存储在享元内部,不会随环境的改变而有所不同,是可以共享的。

外蕴状态是不可以共享的,它随环境的改变而改变的,因此外蕴状态是由客户端来保持(因为环境的变化是由客户端引起的)。

使用场景:

如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销的时候就可以考虑是否可以使用享元模式。

例如,如果发现某个对象的生成了大量细粒度的实例,并且这些实例除了几个参数外基本是相同的,如果把那些共享参数移到类外面,在方法调用时将他们传递进来,就可以通过共享大幅度单个实例的数目。

2019-03-12-20_44_54.png

转载地址:http://eggxo.baihongyu.com/

你可能感兴趣的文章
互联网大数据支撑生态银行建设
查看>>
视频会议系统迎来第四次浪潮
查看>>
报告显示:被调研中国企业超85%已从数字转型中获得回报
查看>>
软件探索性测试 笔记二
查看>>
将来也不会被破译的分布式存储系统
查看>>
光伏电站或成辅助服务市场“输家”
查看>>
今年光伏“领跑者”计划将升级扩围
查看>>
Java程序运行超时后退出或进行其他操作的实现
查看>>
手把手教你启用RemoteFX以及Hyper-V GPU卸载
查看>>
《交互式程序设计 第2版》一3.10 更进一步
查看>>
英伟达发布Tesla P4&P40两款基于Pascal架构的深度学习芯片
查看>>
《ANSYS Workbench有限元分析实例详解(静力学)》——2.5 Windows界面相应操作
查看>>
《代码整洁之道:程序员的职业素养》一一1.3 首先,不行损害之事
查看>>
intellij 创建java web项目(maven管理的SSH)
查看>>
UML介绍--用例图
查看>>
阿里云DTS VS MySQLdump
查看>>
为android封装的百度定位组件
查看>>
我的友情链接
查看>>
Linux系统新手学习的11点建议
查看>>
Android SDK:构建一个购物中心搜索的应用(二)-Points of Interest
查看>>