第14章 享元模式课件.ppt

第14章 享元模式课件.ppt

ID:58450113

大小:1.96 MB

页数:25页

时间:2020-09-07

第14章 享元模式课件.ppt_第1页
第14章 享元模式课件.ppt_第2页
第14章 享元模式课件.ppt_第3页
第14章 享元模式课件.ppt_第4页
第14章 享元模式课件.ppt_第5页
资源描述:

《第14章 享元模式课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、DesignPatterns享元模式大纲享元模式概述享元模式的结构与实现享元模式的应用实例有外部状态的享元模式单纯享元模式和复合享元模式享元模式的优缺点与适用环境享元模式概述动机如果一个软件系统在运行时所创建的相同或相似对象数量太多,将导致运行代价过高,带来系统资源浪费、性能下降等问题如何避免系统中出现大量相同或相似的对象,同时又不影响客户端程序通过面向对象的方式对这些对象进行操作呢?享元模式享元模式概述字符享元对象示意图享元模式概述分析享元模式:通过共享技术实现相同或相似对象的重用享元池(FlyweightPool):存储共享实例对象的地方享元

2、模式概述分析内部状态(IntrinsicState):存储在享元对象内部并且不会随环境改变而改变的状态,内部状态可以共享(例如:字符的内容)外部状态(ExtrinsicState):随环境改变而改变的、不可以共享的状态。享元对象的外部状态通常由客户端保存,并在享元对象被创建之后,需要使用的时候再传入到享元对象内部。一个外部状态与另一个外部状态之间是相互独立的(例如:字符的颜色和大小)享元模式概述原理(1)将具有相同内部状态的对象存储在享元池中,享元池中的对象是可以实现共享的(2)需要的时候将对象从享元池中取出,即可实现对象的复用(3)通过向取出的

3、对象注入不同的外部状态,可以得到一系列相似的对象,而这些对象在内存中实际上只存储一份享元模式概述享元模式的定义对象行为型模式享元模式:运用共享技术有效地支持大量细粒度对象的复用。FlyweightPattern:Usesharingtosupportlargenumbersoffine-grainedobjectsefficiently.享元模式概述享元模式的定义又称为轻量级模式要求能够被共享的对象必须是细粒度对象享元模式的结构与实现享元模式的结构享元模式的结构与实现享元模式的结构享元模式包含以下4个角色:Flyweight(抽象享元类)Conc

4、reteFlyweight(具体享元类)UnsharedConcreteFlyweight(非共享具体享元类)FlyweightFactory(享元工厂类)享元模式的结构与实现享元模式的实现典型的抽象享元类代码:publicabstractclassFlyweight{publicabstractvoidoperation(StringextrinsicState);}享元模式的结构与实现享元模式的实现典型的具体享元类代码:publicclassConcreteFlyweightextendsFlyweight{//内部状态intrinsicSt

5、ate作为成员变量,同一个享元对象其内部状态是一致的privateStringintrinsicState;publicConcreteFlyweight(StringintrinsicState){this.intrinsicState=intrinsicState;}//外部状态extrinsicState在使用时由外部设置,不保存在享元对象中,即使是同一个对象,在每一次调用时可以传入不同的外部状态publicvoidoperation(StringextrinsicState){//实现业务方法}}享元模式的结构与实现享元模式的实现典型的非

6、共享具体享元类代码:publicclassUnsharedConcreteFlyweightextendsFlyweight{publicvoidoperation(StringextrinsicState){//实现业务方法}}享元模式的结构与实现享元模式的实现典型的享元工厂类代码:publicclassFlyweightFactory{//定义一个HashMap用于存储享元对象,实现享元池privateHashMapflyweights=newHashMap();publicFlyweightgetFlyweight(Stringkey){/

7、/如果对象存在,则直接从享元池获取if(flyweights.containsKey(key)){return(Flyweight)flyweights.get(key);}//如果对象不存在,先创建一个新的对象添加到享元池中,然后返回else{Flyweightfw=newConcreteFlyweight();flyweights.put(key,fw);returnfw;}}}享元模式的应用实例实例说明某软件公司要开发一个围棋软件,其界面效果如下图所示:围棋软件界面效果图该软件公司开发人员通过对围棋软件进行分析发现,在图中,围棋棋盘中包含大

8、量的黑子和白子,它们的形状、大小都一模一样,只是出现的位置不同而已。如果将每一个棋子都作为一个独立的对象存储在内存中,将导致该围棋软件在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。