python设计模式(十):享元模式
元,可理解为python中的元类、最小粒度的类,系统中存在大量的相似对象时,可以选择享元模式提高资源利用率。
# -*- coding:utf-8 -*-
class FlyweightBase:
def offer(self):
"""享元基类"""
pass
class Flyweight(FlyweightBase):
"""共享享元类"""
def __init__(self, name):
self.name = name
def get_price(self, price):
print('产品类型:{} 详情:{}'.format(self.name, price))
class FactoryFlyweight:
"""享元工厂类"""
def __init__(self):
self.product = {}
def Getproduct(self, key):
if not self.product.get(key, None):
self.product[key] = Flyweight(key)
return self.product[key]
if __name__ == '__main__':
test = FactoryFlyweight()
A = test.Getproduct("高端")
A.get_price("香水:80")
B = test.Getproduct("高端")
B.get_price("面膜:800")
产品类型:高端 详情:香水:80
产品类型:高端 详情:面膜:800
在这个案例中共享了报价过程的类Flyweight,同一种产品类型的报价过程只会实例化一次,这就是享元模式最核心的要义:共享业务逻辑上的最小单元。
两个状态:
内蕴状态存储在享元内部,不会随环境的改变而有所不同,是可以共享的。
外蕴状态是不可以共享的,它随环境的改变而改变的,因此外蕴状态是由客户端来保持(因为环境的变化是由客户端引起的)。
使用场景:
如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销的时候就可以考虑是否可以使用享元模式。
例如,如果发现某个对象的生成了大量细粒度的实例,并且这些实例除了几个参数外基本是相同的,如果把那些共享参数移到类外面,在方法调用时将他们传递进来,就可以通过共享大幅度单个实例的数目。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python设计模式(九):外观模式
#-*-coding:utf-8-*-classAPI1: defSave(self): print('保存数据A') defDel(self): print('删除数据A')classAPI2: defSave(self): print('保存数据B') defDel(self): print('删除数据B')classFacade: def__init__(self): self._api1=API1() self._api2=API2() defSaveAll(self): [obj.Save()forobjin[self._api1,self._api2]] defDelAll(self): [obj.Save()forobjin[self._api1,self._api2]]if__name__=='__main__': test=Facade() test.SaveAll() test.DelAll() ---------------- 保存数据A 保存数据B 删除数据A 删除数据B 外观模式(Facade),亦称“过程模式”,为子系统中的一组接口提供一个一致的界面,Fac...
- 下一篇
软件服务商如何与需求方合理报价?
在完全了解客户的需求后,下一步就是要确定一个合理的报价。接包方要从跟客户的交谈中尽量地了解出客户的准确意思,思考客户想要的是怎样的一个软件,项目复杂的程度多大,客户的要求有多高,客户的性格如何,能够接受的价格范围等等,这些因素对于软件项目的报价都是密切相关的。在很多的情况下,客户在跟接包方谈项目之前,心理都已经有一个价格底线。如果要投入的费用超过了客户的预算范围,客户将不再与你谈该项目,他会转而找其它软件团队商谈。所以跟客户谈项目的过程中要迅速地思考客户需求的真正含义,能够通过某种转换和变通,把客户对于技术的要求与自己团队的技术力量可以接受的价格相对比,从而得出一个双方都能接受的报价。在与客户的谈判当中,灵活变通是成功的关键之一。当然并不是所有的客户都可以通过变通而满足,遇到客户不认同项目费用的情况一定要处之泰然,真诚地为客户解释,把客户的需求细化为技术上的要求给他分析,让他同意你的报价的合理性。即使客户对编程技术不是很了解,但经过你的细致的分析后也会对你的报价表示认同的。入驻了汇新云平台的服务商就能够很深刻地体会到报价很重要,汇新云平台能够很好地为企业促进供需双方的沟通,并且入驻后可...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池