Python设计模式结构型享元模式

作者:hqx 时间:2023-12-19 13:57:40 

一、享元模式

享元,可理解为 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")

来源:https://is-cloud.blog.csdn.net/article/details/122934432

标签:Python,设计模式,享元模式
0
投稿

猜你喜欢

  • 浅谈python元素如何去重,去重后如何保持原来元素的顺序不变

    2023-03-07 19:39:32
  • 使用Pyparsing处理复杂文本实现过程

    2023-03-21 13:37:44
  • 关于javascript中伪数组和真数组的一些小秘密

    2023-07-02 03:47:47
  • 如何使用VSCode愉快的写Python于调试配置步骤

    2021-11-21 06:16:12
  • JS实现六边形3D拖拽翻转效果的方法

    2023-08-28 15:51:31
  • Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树

    2022-11-20 01:32:46
  • jQuery+AJAX实现网页无刷新上传

    2024-04-17 10:39:39
  • numpy.transpose()实现数组的转置例子

    2021-11-14 13:24:55
  • Python爬虫库requests获取响应内容、响应状态码、响应头

    2022-05-03 14:37:27
  • face_recognition库在python的安装

    2021-06-16 02:29:27
  • django请求返回不同的类型图片json,xml,html的实例

    2021-05-17 10:03:23
  • Python Tornado之跨域请求与Options请求方式

    2023-11-24 19:47:08
  • 格式化数字ASP,PHP版

    2009-01-19 14:17:00
  • 使用Python创建简单的HTTP服务器的方法步骤

    2023-07-17 01:33:27
  • 解决Python2.7中IDLE启动没有反应的问题

    2022-10-17 17:43:57
  • 浅谈MySQL中优化sql语句查询常用的30种方法

    2024-01-27 18:39:16
  • numpy中的随机打乱数据方法np.random.shuffle解读

    2023-05-19 08:26:53
  • 使用php数据缓存技术提高执行效率

    2023-05-24 23:14:24
  • asp.net(c#)实现从sqlserver存取二进制图片的代码

    2023-06-26 21:48:03
  • ASP访问数量统计代码

    2011-04-08 10:59:00
  • asp之家 网络编程 m.aspxhome.com