1. 享元模式(Flyweight)介绍

UML类图

角色介绍

  • Flyweight:抽象享元类。
  • ConcreteFlyweight:具体享元类,实现了Flyweight。指定内部状态。
  • UnsharedConcreteFlyweight:非享元类。
  • FlyweightFactory:享元创建工厂类。

优点

减少重复对象,大大节约了系统资源。

缺点

  • 享元模式虽然节约了系统资源,但同时也提高了系统的复杂性,尤其当遇到外部状态和内部状态混在一起时,需要先将其进行分离,才可以使用享元模式。否则,会引起逻辑混乱或业务风险;
  • 享元模式中需要额外注意线程安全问题。

使用场景

  • 系统中存在大量的相似对象时,可以选择享元模式提高资源利用率。
  • 需要缓冲池的场景中,可以使用享元模式。如进程池,线程池等技术,就可以使用享元模式(事实上,很多的池技术中已经使得了享元模式)。

2. 示例

"""Flyweight Pattern with Python Code
"""from abc import abstractmethod, ABCMeta# 抽象享元类
class Flyweight(metaclass=ABCMeta):@abstractmethod def operation(self):pass# 具体享元类,实现了Flyweight
class ConcreteFlyweight(Flyweight):def __init__(self, name):self.name = namedef operation(self):print("Name: %s" % self.name)# 享元创建工厂类
class FlyweightFactory():_dict = {}def getFlyweight(self, name):if name not in self._dict:self._dict[name] = ConcreteFlyweight(name)return self._dict[name]def getFlyweightCount(self):return len(self._dict)class Client(object):def main(self):factory = FlyweightFactory()c1_capp = factory.getFlyweight("cappuccino")c1_capp.operation()c2_mocha = factory.getFlyweight("mocha")c2_mocha.operation()c3_capp = factory.getFlyweight("cappuccino")c3_capp.operation()print("Num of Flyweight Instance: %s" % factory.getFlyweightCount())if __name__=="__main__":Client().main()

输出:

# ./Flyweight.py
Name: cappuccino
Name: mocha
Name: cappuccino
Num of Flyweight Instance: 2

参考:
https://blog.csdn.net/qq_17513503/article/details/88962622
https://www.cnblogs.com/ITyannic/p/12439495.html

python设计模式11-享元模式相关推荐

  1. Python设计模式之享元模式(8)

    享元模式(Flyweight Pattern):复用现有的同类对象,改善资源使用 主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应 ...

  2. python设计模式之享元模式

    一.享元模式定义: 享元模式是一种用于解决资源和性能压力时会使用到的设计模式,它的核心思想是通过引入数据共享来提升性能. 在开发3D游戏时,例如有成千上万的士兵或者有成千上万棵树,如果一个3D地带的每 ...

  3. Python设计模式:享元模式和单例模式

    设计模式八:享元模式和单例模式 什么是享元模式 享元模式是一个用于优化的设计模式,通过为相似对象引入数据共存来最小化内存使用,提升性能. 一个享元就是一个包含状态独立的不可变数据的对象,依赖状态的可变 ...

  4. 北风设计模式课程---享元模式

    北风设计模式课程---享元模式 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式的本质是什么? 池技术:各种缓存池都是享元模式的体现 说到享元模 ...

  5. 每天一个设计模式之享元模式

    作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) ...

  6. Java设计模式之享元模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  7. Java设计模式之享元模式

    Java设计模式之享元模式 1. 享元模式概述 1.1 享元定义 1.2 享元模式注意事项 2. 享元模式实现 1. 享元模式概述 1.1 享元定义 1)享元模式(享元模式)也叫蝇量模式:利用共享技术 ...

  8. 北风设计模式课程---享元模式与单例模式区别

    北风设计模式课程---享元模式与单例模式区别 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式与单例模式区别? 级别:单例模式是类级别的,一个类 ...

  9. .net设计模式 (享元模式)学习笔记

    运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题  合理应用扬长避短 结构性设计模式:关注的是类与类之间的关系 .net设计模式 (享元模式)学习笔记 ...

  10. 详解设计模式:享元模式

    享元模式(Flyweight Pattern),是对象池的一种体现,也是 GoF 的 23 种设计模式中的一种结构型设计模式. 享元模式 主要用于减少创建对象的数量,以减少内存占用和提高性能.它提供了 ...

最新文章

  1. 只知道用它打印了Hello World,除此之外你了解多少呢?
  2. 【Linux学习九】负载均衡
  3. leetcode 470. 用 Rand7() 实现 Rand10()
  4. onsrcoll和scrollTop兼容与实现
  5. mysql 线程缓存_浅析MySQL内存的使用说明(全局缓存+线程缓存)
  6. 这些全国各地甜点,你都吃过了吗?
  7. win10iot 编程_使用DIY Blynk板对IoT按钮进行编程
  8. Theano 中文文档 0.9 - 6. 更新Theano
  9. h5的fetch方法_HTML5 fetch API
  10. 选择自己用的到的文件编译一个CEGUISample(一)
  11. centos7进入单用户模式
  12. 银行数据库安全可控替代方案探索
  13. Metamaterials perform image compression before light reaches the sensor(微波成像,拍摄与压缩同步进行)
  14. 【手写字母识别】基于matlab GUI ELMAN+BP神经网络手写大写字母(A-O)识别【含Matlab源码 785期】
  15. IDEA如何新建一个source folder
  16. PAT --- 1068.万绿丛中一点红 (20 分)
  17. c语言获取系统时间精确到毫秒,如何获取系统流逝时间(要求精确到毫秒)
  18. hr标签html样式,hr标签样式修改及美化(css的hr标签实现精美线条)
  19. 使用安装Ubuntu和Win7双系统
  20. centos6.6 极点五笔安装

热门文章

  1. c++ 删除二叉树的子树_数据结构—树|二叉树|前序遍历、中序遍历、后序遍历【图解实现】...
  2. 【Junos】手动生成Core-dump文件
  3. 请教 这段代码有问题吗
  4. MOSS 2007 系列学习之安装篇(一)
  5. C++复习总结(涵盖所有C++基本考点)!
  6. JavaWeb笔记(七)FilterListener
  7. 事件处理程序中event参数的传递
  8. 安全测试之session,cookie
  9. UVA 11992 - Fast Matrix Operations(段树)
  10. 关系数据库SQL之可编程性存储过程 1