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 两个列表的差集、并集和交集实现代码
Sep 21 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
python3 enum模块的应用实例详解
Aug 12 Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
python def 定义函数,调用函数方式
Jun 02 Python
Python中Selenium库使用教程详解
Jul 23 Python
Scrapy 配置动态代理IP的实现
Sep 28 Python
C站最全Python标准库总结,你想要的都在这里
Jul 03 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
基于mysql的bbs设计(五)
2006/10/09 PHP
PHP操作xml代码
2010/06/17 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
php计算整个目录大小的方法
2015/06/19 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
二年级体育教学反思
2014/01/15 职场文书
信息专业大学生自我评价分享
2014/01/17 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
法院信息化建设方案
2014/05/21 职场文书
2014年安全生产责任书
2014/07/22 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
答辩状格式范本
2015/05/22 职场文书
小学班主任教育随笔
2015/08/15 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL