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 相关文章推荐
pyqt4教程之messagebox使用示例分享
Mar 07 Python
跟老齐学Python之数据类型总结
Sep 24 Python
python实现八大排序算法(1)
Sep 14 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
python实现二叉查找树实例代码
Feb 08 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
python实现录屏功能(亲测好用)
Mar 02 Python
Django models filter筛选条件详解
Mar 16 Python
python IDLE添加行号显示教程
Apr 25 Python
Python内置函数locals和globals对比
Apr 28 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 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
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python发展史及网络爬虫
2019/06/19 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
Europcar意大利:汽车租赁
2019/07/07 全球购物
公司中秋节活动方案
2014/02/12 职场文书
人事科岗位职责范本
2014/03/02 职场文书
设计顾问服务计划书
2014/05/04 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android