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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python中函数的多种格式和使用实例及小技巧
Apr 13 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
python flask 多对多表查询功能
Jun 25 Python
python selenium UI自动化解决验证码的4种方法
Jan 05 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
深入解析神经网络从原理到实现
Jul 26 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
Python常用数据类型之间的转换总结
Sep 06 Python
python字符串判断密码强弱
Mar 18 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
Python实现画图软件功能方法详解
Jul 28 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默认安装产生系统漏洞
2006/10/09 PHP
用PHP开发GUI
2006/10/09 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
js+css实现打字效果
2020/06/24 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
Python 时间处理datetime实例
2008/09/06 Python
python检测某个变量是否有定义的方法
2015/05/20 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
Python装饰器知识点补充
2018/05/28 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
python调用私有属性的方法总结
2020/07/24 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
优秀团员个人事迹材料
2014/01/29 职场文书
监察建议书格式
2014/05/19 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
Mysql基础知识点汇总
2021/05/26 MySQL