网络编程
位置:首页>> 网络编程>> Python编程>> Python设计模式之享元模式原理与用法实例分析

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

作者:Andy冉明  发布时间:2021-08-20 20:01:57 

标签:Python,设计模式,享元模式

本文实例讲述了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程序设计有所帮助。

来源:https://www.cnblogs.com/onepiece-andy/p/python-flyweight-pattern.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com