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+Django+apache的配置方法详解
Jun 01 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Python中的pygal安装和绘制直方图代码分享
Dec 08 Python
python如何让类支持比较运算
Mar 20 Python
用python打印1~20的整数实例讲解
Jul 01 Python
如何使用python传入不确定个数参数
Feb 18 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
Django基于客户端下载文件实现方法
Apr 21 Python
Python如何定义有可选参数的元类
Jul 31 Python
python中使用.py配置文件的方法详解
Nov 23 Python
Pytorch 中的optimizer使用说明
Mar 03 Python
如何基于python实现单目三维重建详解
Jun 25 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/09/27 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
Python实现的密码强度检测器示例
2017/08/23 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
提升python处理速度原理及方法实例
2019/12/25 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
生产车间主管岗位职责
2013/12/28 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
通知怎么写?
2019/04/17 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers