Python设计模式之享元模式原理与用法实例分析
作者:Andy冉明 时间:2021-08-20 20:01:57
本文实例讲述了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程序设计有所帮助。
来源:https://www.cnblogs.com/onepiece-andy/p/python-flyweight-pattern.html
标签:Python,设计模式,享元模式
0
投稿
猜你喜欢
python进行图像边缘检测的详细教程
2023-08-10 04:53:40
pytorch: Parameter 的数据结构实例
2022-10-19 22:28:22
Python 将RGB图像转换为Pytho灰度图像的实例
2022-05-26 14:13:08
python入门之语句(if语句、while语句、for语句)
2022-01-25 20:01:07
Python实现抓取城市的PM2.5浓度和排名
2023-07-01 11:13:33
Python imutils 填充图片周边为黑色的实现
2021-04-13 04:06:32
Python定时任务随机时间执行的实现方法
2023-11-23 18:40:21
Python使用Rich type和TinyDB构建联系人通讯录
2023-07-13 10:33:22
简单理解Python中的装饰器
2021-06-18 01:44:21
golang与pgsql交互的实现
2024-05-25 15:11:52
Python数据结构之图的应用示例
2021-06-02 21:59:27
Mysql实现增量恢复的方法详解
2024-01-13 18:10:47
python+pyqt5实现KFC点餐收银系统
2022-02-05 08:49:46
Pycharm设置界面全黑的方法
2021-09-15 11:13:51
C#使用ADO.Net部件来访问Access数据库的方法
2024-01-27 01:45:42
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2022-06-01 11:09:45
Vue2.0/3.0双向数据绑定的实现原理详解
2024-05-21 10:17:58
python 读取dicom文件,生成info.txt和raw文件的方法
2021-06-26 14:45:50
Python批量修改文本文件内容的方法
2022-07-16 08:37:43
python实现门限回归方式
2023-12-27 09:19:06