设计优化之享元模式

举报
西魏陶渊明 发表于 2022/09/25 04:03:06 2022/09/25
【摘要】 何为享元模式,大家不要被这个陌生的词汇所吓倒,其实笔者感觉这个是最容易理解的,下面请看笔者分析。 享元模式: 所谓享元模式,就是相同对象,在内存中之存在一份,大家都共享着一个实例对象。代码体现上很像工厂模式,通过工厂找到这个对象,如果存在就直接获取,如果不存在就创建同时,保存,方便下次直接获取。以下是代码 定义接口,可以从这个里面...
何为享元模式,大家不要被这个陌生的词汇所吓倒,其实笔者感觉这个是最容易理解的,下面请看笔者分析。
享元模式:

所谓享元模式,就是相同对象,在内存中之存在一份,大家都共享着一个实例对象。代码体现上很像工厂模式,通过工厂找到这个对象,如果存在就直接获取,如果不存在就创建同时,保存,方便下次直接获取。以下是代码

  • 定义接口,可以从这个里面获得

  
  1. /**
  2. * Created by mac on 2017/6/4.
  3. */
  4. public interface IFlyWeight {
  5. String getName();
  6. }
  • 定义用户实现类

  
  1. public class UserFlyWeight implements IFlyWeight {
  2. public String name;
  3. public UserFlyWeight(String name){
  4. this.name=name;
  5. }
  6. public String getName() {
  7. return this.name;
  8. }
  9. }
  • 具体实现

  
  1. /*
  2. * Created by mac on 2017/6/4.
  3. */
  4. public class FlyWightFactory {
  5. Map<String, IFlyWeight> fly = new HashMap<String, IFlyWeight>();
  6. /**
  7. * 存在就直接返回,不存在就创建保存并返回
  8. * @param name
  9. * @return
  10. */
  11. public IFlyWeight getFlyWeight(String name) {
  12. IFlyWeight result = fly.get(name);
  13. if (result == null) {
  14. result = new UserFlyWeight(name);
  15. fly.put(name, result);
  16. }
  17. return result;
  18. }
  19. }

在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象。Flyweight模式是一个提高[程序]效率和性能的模式,会大大加快程序的运行速度.

  • 实验

  
  1. public class Main {
  2. public static void main(String[] args) {
  3. long start=System.currentTimeMillis();
  4. for (int i = 0; i < 100000; i++) {
  5. String name = "A";
  6. String name2 = "B";
  7. String name3 = "C";
  8. FlyWightFactory.getFlyWeight(name).getName();
  9. FlyWightFactory.getFlyWeight(name2).getName();
  10. FlyWightFactory.getFlyWeight(name3).getName();
  11. }
  12. long end=System.currentTimeMillis();
  13. System.out.format("耗时:%d,ms,map实例数量:%d",(end-start),FlyWightFactory.fly.size());
  14. //耗时:63,ms,map实例数量:3
  15. }
  16. }

可以看到虽然从里面取了10万次,但是只用了63ms,切对于这些相同对象,内存中之存在唯一的一份

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/102425294

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。