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 自动提交和抓取网页
Jul 13 Python
Python编程中的异常处理教程
Aug 21 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
python面试题小结附答案实例代码
Apr 11 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
在vscode中配置python环境过程解析
Sep 28 Python
Django用户身份验证完成示例代码
Apr 03 Python
基于Python的Jenkins的二次开发操作
May 12 Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 Python
Python pip 常用命令汇总
Oct 19 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 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实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
js加解密 脚本解密
2008/02/22 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
js操作table中tr的顺序实现上移下移一行的效果
2018/11/22 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
Pytorch之Variable的用法
2019/12/31 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
医院办公室主任职责
2013/12/29 职场文书
劳动实践课感言
2014/02/01 职场文书
爱护公共设施的标语
2014/06/24 职场文书
培训师岗位职责
2015/02/14 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
《去年的树》教学反思
2016/02/18 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
浅谈react useEffect闭包的坑
2021/06/08 Javascript