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的接口测试框架实例
Nov 04 Python
Python学习入门之区块链详解
Jul 25 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
Jan 03 Python
20个常用Python运维库和模块
Feb 12 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
Python实现多线程的两种方式分析
Aug 29 Python
Python 确定多项式拟合/回归的阶数实例
Dec 29 Python
Python数据类型之Set集合实例详解
May 07 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
详解python中的数据类型和控制流
Aug 08 Python
python 生成任意形状的凸包图代码
Apr 16 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编程效率技巧
2015/08/13 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
python适合做数据挖掘吗
2020/06/16 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
DOM和JQuery对象有什么区别
2016/11/11 面试题
岗位职责的含义
2013/11/17 职场文书
创业资金计划书
2014/02/06 职场文书
广播体操口号
2014/06/18 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python