ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式 享元模式

2021-11-29 19:00:46  阅读:126  来源: 互联网

标签:享元 状态 对象 模式 共享 设计模式 享元类


享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统知识用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够实现共享的对象必须是细粒度对象,因此它又称为轻量级模型,它是一种对象结构型模式。

 

模式动机:

  面向对象技术可以很好的解决一些灵活性或可扩展性问题,但很多情况下需要在系统中天界一些二类和对象的个数。当对象数量过多时,将导致运行代价过高,带来性能下降问题。

享元模式通过共享技术实现相同或相似的对象的重用。

 

模式结构:

  • Flyweight:抽象享元类
  • ConcreteFlyweight:共享享元类
  • UnsharedConcreteFlyweight:非共享具体享元类
  • FlyweightFactory:享元工厂类

 

模式分析:

  享元模式是一个考虑系统性能的设计模式,通过享元模式可以节约内存空间,提高系统性能。享元模式的核心在于享元工厂类,享元工厂类的作用在于提供一个用于存储享元对象的享元池,用户需要对象时,首先从享元池中获取,如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象。

 

享元模式能够共享的关键是区分内部状态外部状态

  • 内部状态:存储在享元内部并且不会随环境改变而改变的状态。(可共享)
  • 外部状态:外部状态是随着环境改变而改变的、不可共享的状态。

 

具体类图:

                        

类图解析:NerworkDevice即为抽象享元类,它使用Port类关系为依赖关系,Swith、Hub为共享享元类,他们实现了NetworkDevice这个接口,DeviceFactory是享元工厂类它与NetworkDevice是聚合关系。

 

主要的代码实现在DevideFactory中,具体实现如下:

                  

 

享元模式优点:

 

  • 极大的减少了内存中对象的数量
  • 享元对象可以在不同的个环境中被共享

 

缺点:

  需要分离出内部状态和外部状态

  为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部化是的运行时间变长

 

标签:享元,状态,对象,模式,共享,设计模式,享元类
来源: https://www.cnblogs.com/wfswf/p/15620802.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有