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批量同步web服务器代码核心程序
Sep 01 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
Python中Django 后台自定义表单控件
Mar 28 Python
Python中import机制详解
Nov 14 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
利用python将图片版PDF转文字版PDF
May 03 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
windows下Python安装、使用教程和Notepad++的使用教程
Oct 06 Python
jupyter lab文件导出/下载方式
Apr 22 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
PHP初学者头疼问题总结
2006/07/08 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
详解package.json版本号规则
2019/08/01 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
python requests指定出口ip的例子
2019/07/25 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
explicit和implicit的含义
2012/11/15 面试题
华为python面试题
2016/05/03 面试题
函授生自我鉴定
2014/03/25 职场文书
小学运动会开幕词
2015/01/28 职场文书
工作推荐信模板
2015/03/25 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
浅析Python实现DFA算法
2021/06/26 Python
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android