结构型模式——享元模式(Flywight)

开头

     今天我们学习一下享元模式,当你看到享元两个字你会想到什么?共享元数据?共享已经存在的对象?元有头、首的意思。所谓的享元模式也有这样的特点,系统需要多次使用相同对象的时候,我们就用到了享元模式,既然对象相同,每次我只需要调用该对象就可以,不需要重复创建相同的对象,这样是不是大大的减少了对系统内存空间的浪费。

  

内容

   既然享元模式这么好,享元模式大致分为四类角色,分别为Flywight(抽象享元角色)、ConcreteFlyweight(具体享元类)、 UnsharedConcreteFlyweight(非共享具体享元类)、 FlyweightFactory(享元工厂类)。

    例子:下面我们以大话设计中的例子给大家介绍一下享元模式:各个网站的功能相同,但是各个网站提供的参数不同,如果我给每一个网站提供一定的内存,这样就会给服务器造成很大的浪费,既然各个网站的功能相同,我们可以共享一个网站,其他的网站只需要提供自己所需要的参数即可,这就是所谓的享元模式


FlyweightFactory(享元工厂类):将各种共享的享元对象放在一个集合当中,当外部调用享元对象时,如果集合中没有,则县享元工厂创建一个享元对象,放在集合中。


Flywight(抽象享元角色):一个接口或抽象类,声明了抽象享元类的公共方法,可以向外界提供享元对象,也可以设置用户提供的外部数据。说白了就是一种既可以提供共享的数据,也可以设置外部随意提供的参数。

ConcreteFlyweight(具体享元类):实现抽象享元觉得的方法,为每一个具体的享元类提供一个享元对象。


UnsharedConcreteFlyweight(非共享具体享元类):就是外部用户根据自己的需求提供的参数。


客户端:根据自己需求提供外部参数,实例化自己提供的参数。


总结

享元模式(Flyweight):运用共享技术有效的支持大量细粒度的对象。

优点:(1)共享享元对象后,减少所需对象的实例化,防止内存的浪费。

          (2)减少内存对象数量,相同对象只有一个,并且作为享元对象。

缺点:(1)将内部状态和外部状态分开,系统逻辑性更加混乱,当然这是不可避免的。

适用场景:(1)系统中存在大量重复的对象,对系统内存造成了浪费。

               (2)享元对象必须多次重复使用,如果不多次重复的使用,共享效率低的话,不仅浪给内存,还影响系统运行效率。


      关于享元模式的学习,我们就先学习到这里,无非就是对可以重复利用的对象进行共享,外部根据自己的需求,给共享对象提供自己的参数,极大的减少了对象的创建,减少了对内存的浪费。

      如果本篇博客对于初学者的您有一定的帮助,给博主点一个赞吧。



猜你喜欢

转载自blog.csdn.net/fjxcsdn/article/details/80464616
今日推荐