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使用7z解压软件备份文件脚本分享
Feb 21 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
人工神经网络算法知识点总结
Jun 11 Python
PyQt5固定窗口大小的方法
Jun 18 Python
使用Python Pandas处理亿级数据的方法
Jun 24 Python
python实时检测键盘输入函数的示例
Jul 17 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
通过Python实现一个简单的html页面
May 16 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
Python关于OS文件目录处理的实例分享
May 23 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
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
JMenuTab简单使用说明
2008/03/13 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
Python中反射和描述器总结
2018/09/23 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python绘制雪景图
2019/12/16 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
极简的HTML5模版
2015/07/09 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
民用住房租房协议书
2014/10/29 职场文书
见习报告格式要求
2014/11/04 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
靠谱的活动总结
2019/04/16 职场文书