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


Posted in Python onJanuary 11, 2019

本文实例讲述了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相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

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

Python 相关文章推荐
详解Python的Lambda函数与排序
Oct 25 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
Pandas探索之高性能函数eval和query解析
Oct 28 Python
Python实现嵌套列表去重方法示例
Dec 28 Python
python+opencv实现动态物体识别
Jan 09 Python
python删除某个字符
Mar 19 Python
Numpy之random函数使用学习
Jan 29 Python
Python类的继承、多态及获取对象信息操作详解
Feb 28 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
Python类和实例的属性机制原理详解
Mar 21 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 #Python
python对列进行平移变换的方法(shift)
Jan 10 #Python
对python模块中多个类的用法详解
Jan 10 #Python
python 图像平移和旋转的实例
Jan 10 #Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 #Python
详解pandas安装若干异常及解决方案总结
Jan 10 #Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 #Python
You might like
APMServ使用说明
2006/10/23 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
Maps Javascript
2007/01/22 Javascript
Add a Formatted Table to a Word Document
2007/06/15 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
js实现左右轮播图
2020/01/09 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
python 使用get_argument获取url query参数
2017/04/28 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
pandas数据处理进阶详解
2019/10/11 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
奥巴马演讲稿
2014/01/08 职场文书
党务公开方案
2014/05/06 职场文书
党员四风剖析材料
2014/08/27 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
党支部半年考察意见
2015/06/01 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
护士工作心得体会
2016/01/25 职场文书
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技