Python设计模式结构型享元模式
一、享元模式
享元,可理解为 Python
中的元类、最小粒度的类,系统中存在大量的相似对象时,可以选择享元模式提高资源利用率。
享元具有两种状态:
内蕴状态:存储在享元内部,不会随环境的改变而有所不同,是可以共享的。
外蕴状态:是不可以共享的,它随环境的改变而改变的,因此外蕴状态是由客户端来保持(因为环境的变化是由客户端引起的)。
二、应用场景
如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销的时候就可以考虑是否可以使用享元模式。
例如:如果发现某个对象的生成了大量细粒度的实例,并且这些实例除了几个参数外基本是相同的,如果把那些共享参数移到类外面,在方法调用时将他们传递进来,就可以通过共享大幅度单个实例的数目。
三、代码示例
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")
到此这篇关于Python设计模式结构型享元模式的文章就介绍到这了,更多相关Python享元模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
对Python2与Python3中__bool__方法的差异详解
今天小编就为大家分享一篇对Python2与Python3中__bool__方法的差异详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-11-11matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
这篇文章主要介绍了matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-08-08python playwright--pytest-playwright、pytest-base-url插件编
这篇文章主要介绍了python playwright--pytest-playwright、pytest-base-url插件编写用例,它提供上下文隔离,开箱即用地在多个浏览器配置上运行,它继承了pytest框架,以及支持playwright的一些基础使用,需要的朋友可以参考下2023-05-05Python基于Tkinter的HelloWorld入门实例
这篇文章主要介绍了Python基于Tkinter的HelloWorld入门实例,以一个简单实例分析了Python中Tkinter模块的使用技巧,需要的朋友可以参考下2015-06-06Python中json模块load/loads方法实战以及参数详解
经常在Python中对JSON格式的文件进行操作,今天对这些操作做一个总结,下面这篇文章主要给大家介绍了关于Python中json模块load/loads方法实战以及参数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2022-08-08opencv中颜色空间转换函数cv2.cvtColor()使用
本文主要介绍了opencv中颜色空间转换函数cv2.cvtColor()使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-05-05
最新评论