Python设计模式之享元模式原理与用法实例分析

 更新时间:2019年01月11日 08:40:33   作者:Andy冉明  
这篇文章主要介绍了Python设计模式之享元模式原理与用法,结合实例形式较为详细的分析了享元模式的相关概念、原理、定义及使用方法,需要的朋友可以参考下

本文实例讲述了Python设计模式之享元模式原理与用法。分享给大家供大家参考,具体如下:

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象.

下面是一个享元模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——享元模式
享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象
对一个类进行的实例,只在第一次使用时建立,其他时候是用同一个实例,减少内存的开销
"""
# 抽象网站类
class Website(object):
  def use(self):
    pass
# 具体网站类
class ConcreteWebsite(Website):
  def __init__(self, name):
    self.name = name
  def use(self):
    print "网站分类",self.name
# 不共享的网站类
class UnshareConcreteWebsite(Website):
  def __init__(self, name):
    self.name = name
  def use(self):
    print "不共享网站分类",self.name
# 网站工厂
class WebsiteFactory(object):
  def __init__(self):
    self.hashtable = dict()
  # 获取网站类 如果存在直接返回,如果不存在建好之后返回
  def get_website(self, key):
    if not key in self.hashtable:
      self.hashtable[key] = ConcreteWebsite(key)
    return self.hashtable[key]
  # 网站实例的个数
  def get_website_count(self):
    return len(self.hashtable.keys())
if __name__ == "__main__":
  factory = WebsiteFactory()
  f1 = factory.get_website("blog")
  f2 = factory.get_website("blog")
  f3 = factory.get_website("blog")
  f4 = factory.get_website("website")
  f5 = factory.get_website("website")
  f6 = factory.get_website("website")
  f7 = UnshareConcreteWebsite("test")
  f1.use()
  f2.use()
  f3.use()
  f4.use()
  f5.use()
  f6.use()
  f7.use()

运行结果:

上面类的设计如下图:

 

享元模式可以避免大量非常相似类的开销,在程序设计中,有时会生成大量细粒度的类实例来表示数据,如果这些实例除了几个参数外基本相同,就可以把参数已到实例外面,在方法调用时,把它们传进来,就可以通过共享大幅度减少单个实例的数目

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

您可能感兴趣的文章:

相关文章

  • python实现淘宝秒杀脚本

    python实现淘宝秒杀脚本

    这篇文章主要为大家详细介绍了python实现淘宝秒杀脚本,扫码登录版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Python命名空间详解

    Python命名空间详解

    这篇文章主要介绍了Python命名空间详解,非常重要的概念,需要的朋友可以参考下
    2014-08-08
  • Python描述器descriptor详解

    Python描述器descriptor详解

    这篇文章主要向我们详细介绍了Python描述器descriptor,需要的朋友可以参考下
    2015-02-02
  • python聊天程序实例代码分享

    python聊天程序实例代码分享

    这篇文章主要介绍了用python写的聊天程序,开两个线程,即是客户端,也是服务器,大家可以参考使用
    2013-11-11
  • python kornia计算机视觉库实现图像变化

    python kornia计算机视觉库实现图像变化

    这篇文章主要为大家介绍了python kornia计算机视觉库实现图像变化算法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python学习之pip包管理工具的使用

    Python学习之pip包管理工具的使用

    学习 Python 的过程中,经常会使用 pip 命令去安装第三方模块。pip 是 Python 默认集成的包管理工具,而其本质就是 Python 标准库中的一个包,只是比较特殊一些。本文就来为你你全面揭示一下 pip 包管理工具的使用
    2022-08-08
  • python中__call__内置函数用法实例

    python中__call__内置函数用法实例

    这篇文章主要介绍了python中__call__内置函数用法,实例分析了python中__call__内置函数的原理与使用技巧,需要的朋友可以参考下
    2015-06-06
  • Python数据可视化之Pyecharts使用详解

    Python数据可视化之Pyecharts使用详解

    Pyecharts是一个由百度开源的、用于生成Echarts图表的类库,可以用来进行数据可视化分析。本文将详细讲解一下Pyecharts的使用,需要的可以参考一下
    2022-04-04
  • python中pandas.DataFrame对行与列求和及添加新行与列示例

    python中pandas.DataFrame对行与列求和及添加新行与列示例

    pandas是python环境下最有名的数据统计包,而DataFrame翻译为数据框,是一种数据组织方式,这篇文章主要给大家介绍了python中pandas.DataFrame对行与列求和及添加新行与列的方法,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • Python数据分析:pandas中Dataframe的groupby与索引用法

    Python数据分析:pandas中Dataframe的groupby与索引用法

    这篇文章主要介绍了pandas中Dataframe的groupby与索引用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论