Java设计模式之Flyweight模式.ppt_第1页
Java设计模式之Flyweight模式.ppt_第2页
Java设计模式之Flyweight模式.ppt_第3页
Java设计模式之Flyweight模式.ppt_第4页
Java设计模式之Flyweight模式.ppt_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2 24 2020 Java设计模式之Flyweight模式 GOF 运用共享技术有效地支持大量细粒度的对象 解释一下概念 也就是说在一个系统中如果有多个相同的对象 那么只共享一份就可以了 不必每个都去实例化一个对象 比如说 这里引用GOF书中的例子 一个文本系统 每个字母定一个对象 那么大小写字母一共就是52个 那么就要定义52个对象 如果有一个1M的文本 那么字母是何其的多 如果每个字母都定义一个对象那么内存早就爆了 那么如果要是每个字母都共享一个对象 那么就大大节约了资源 2 24 2020 在Flyweight模式中 由于要产生各种各样的对象 所以在Flyweight 享元 模式中常出现Factory模式 Flyweight的内部状态是用来共享的 Flyweightfactory负责维护一个对象存储池 FlyweightPool 来存放内部状态的对象 Flyweight模式是一个提高程序效率和性能的模式 会大大加快程序的运行速度 应用场合很多 下面举个例子 2 24 2020 先定义一个抽象的Flyweight类 packageFlyweight publicabstractclassFlyweight publicabstractvoidoperation endabstractclassFlyweight 2 24 2020 在实现一个具体类 packageFlyweight publicclassConcreteFlyweightextendsFlyweight privateStringstring publicConcreteFlyweight Stringstr string str endConcreteFlyweight publicvoidoperation System out println Concrete Flyweight string endoperation endclassConcreteFlyweight 2 24 2020 实现一个工厂方法类 packageFlyweight importjava util Hashtable publicclassFlyweightFactory privateHashtableflyweights newHashtable 1publicFlyweightFactory 2 24 2020 publicFlyweightgetFlyWeight Objectobj Flyweightflyweight Flyweight flyweights get obj 2if flyweight null 3 产生新的ConcreteFlyweightflyweight newConcreteFlyweight String obj flyweights put obj flyweight 5 returnflyweight 6 endGetFlyWeight publicintgetFlyweightSize returnflyweights size endclassFlyweightFactory 2 24 2020 这个工厂方法类非常关键 这里详细解释一下 在1处定义了一个Hashtable用来存储各个对象 在2处选出要实例化的对象 在6处将该对象返回 如果在Hashtable中没有要选择的对象 此时变量flyweight为null 产生一个新的flyweight存储在Hashtable中 并将该对象返回 2 24 2020 最后看看Flyweight的调用 packageFlyweight importjava util Hashtable publicclassFlyweightPattern FlyweightFactoryfactory newFlyweightFactory Flyweightfly1 Flyweightfly2 Flyweightfly3 Flyweightfly4 Flyweightfly5 Flyweightfly6 2 24 2020 CreatesanewinstanceofFlyweightPattern publicFlyweightPattern fly1 factory getFlyWeight Google fly2 factory getFlyWeight Qutr fly3 factory getFlyWeight Google fly4 factory getFlyWeight Google fly5 factory getFlyWeight Google fly6 factory getFlyWeight Google endFlyweightPattern publicvoidshowFlyweight 2 24 2020 fly1 operation fly2 operation fly3 operation fly4 operation fly5 operation fly6 operation intobjSize factory getFlyweightSize System out println objSize objSize endshowFlyweight publicstaticvoidmain String args System out println TheFlyWeightPattern FlyweightPatternfp newFlyweightPattern fp showFlyweight endmain endclassFlyweightPattern 2 24 2020 下面是运行结果 Concrete Flyweight GoogleConcrete Flyweight QutrConcrete Flyweight GoogleConcrete Flyweight GoogleConcrete Flyweight GoogleConcrete Flyweight GoogleobjSize 2我们定义了6个对象 其中有5个是相同的 按照Flyweight模式的定义 Google 应该共享一个对象 在实际的对象数中我们可以看出实际的对象却是只有2个 2 24 2020 下面给出一个简易的UML图 2 24 2020 总结 Flyweight 享元 模式是如此的重要 因为它能帮你在一个复杂的系统中大量的节省内存空间 在GOF的书中举了文本处理的例子 我觉得非常恰当 那么 在Java中String这个类型比较特殊 为什么呢 看下面的例子 Stringa hello Stringb hello if a b Syst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论