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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
用python实现对比两张图片的不同
Feb 05 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
解决python 上传图片限制格式问题
Oct 30 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
django的403/404/500错误自定义页面的配置方式
May 21 Python
Python类super()及私有属性原理解析
Jun 15 Python
python为什么会环境变量设置不成功
Jun 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
php字符串截取的简单方法
2013/07/04 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
EasyUI中的tree用法介绍
2011/11/01 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
Python可跨平台实现获取按键的方法
2015/03/05 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
医务工作者先进事迹材料
2014/01/26 职场文书
护士进修自我鉴定
2014/02/07 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
安全教育培训心得体会
2016/01/15 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
springboot用户数据修改的详细实现
2022/04/06 Java/Android