首页 > 编程 > Python > 正文

Python设计模式之享元模式原理与用法实例分析

2019-11-25 13:30:18
字体:
来源:转载
供稿:网友

本文实例讲述了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 Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表