设计模式之第12章-享元模式(Java实现)

  “怎么回事,竟然出现了OutOfMemory的错误。鱼哥,来帮我看看啊。”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊。对了,有说新对象申请不到内存空间。”“这个原因么,我曾写过一篇博文:叫OutOfMemory简单分析。不过你的明显是因为代码问题,产生对象太多,导致内存被耗尽,正好一会有堂课,讲的正好能解决你的问题。”(嘿嘿,轮到我享元模式出场了~)

享元模式之自我介绍

  我,享元模式乃是池技术中的重要实现方式,具体定义如下:Use sharing to support large numbers of fine-grained objects efficiently.翻译过来就是说使用共享对象可以有效的支持大量的细粒度的对象。由定义可知两个要求:细粒度的对象和共享对象。前面那个人出现的问题就是内存溢出,就是因为分配了太多的对象导致了内存溢出,当然还会有损程序的性能。那么如何解决呢,没错就是我所提供的共享技术。在这之前先了解一下对象的外部状态以及内部状态。

  细粒度对象不可避免会使对象数量多且性质相近,那我们就将这些对象分为两部分,也就是外部状态和内部状态。下面解释一下内部状态与外部状态:

  • 外部状态:就是对象得以依赖的一个标记,随环境的改变而改变,不可以共享的状态,比如说用户名以及ID之类的信息。
  • 内部状态:就是对象可以共享出来的信息,存储在享元对象内部并且不会随环境的改变而改变,不必存储在具体某个对象中,属于可以共享的部分。

  我的类图如下:

设计模式之第12章-享元模式(Java实现)

  类图中每个类行驶的功能以及详细的介绍了,我也就不废话了。

享元模式之自我分析

  优点:

  • 减少应用程序创建的对象。
  • 降低程序内存占用。
  • 增强程序性能。

  缺点:

  • 提高了系统复杂性。
  • 需要分离出外部状态和内部状态。

享元模式之实现

  俗话说,没有银弹,但是却有通用的实现的代码,我水平那么高,自然会用通用的代码来实现我的模式~我的模式我做主,首先是抽象享元角色:

 1 public abstract class Flyweight{
 2     //内部状态
 3     private String intrinsic;
 4     //外部状态
 5     protected final String Extrinsic;
 6     //要求享元角色必须接受外部状态
 7     public Flyweight(String extr){
 8         this.Extrinsic = extr;
 9     }
10     //定义业务操作
11     public abstract void operate();
12 
13     //内部状态的getter/setter
14     public String getIntrinsic(){
15         return intrinsic;
16     }
17 
18     public void setIntrinsic(String intrinsic)
19     {
20         this.intrinsic = intrinsic;
21     }
22 }
View Code

相关文章:

  • 2021-05-08
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-19
  • 2022-12-23
  • 2021-12-09
  • 2022-12-23
  • 2022-12-23
  • 2021-04-30
相关资源
相似解决方案