构造行模式之享元模式(FLYWEIGHT)

结构行模式之享元模式(FLYWEIGHT)

享元模式

  享元模式 (英语:Flyweight Pattern)是一种软件设计模式 。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

 

 

     享元模式 以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键 是区分内蕴状态 外蕴状态

     一个内蕴状态是存储在享元对象内部的,并且是不会随环境改变而有所不同的,因此,一个享元可以具有内蕴含状态并可以共享。

    一个外蕴状态是随环境改变而改变的,不可以共享的状态,享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。

 

      外蕴状态不可以影响享元对象的内蕴状态,它们是相互独立的。

 

       享元模式的种类:单纯享元模式复合享元模式两种形式


                            构造行模式之享元模式(FLYWEIGHT)

   

        在单纯享元模式中,所有的享元对象都是可以共享的

抽象享元角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口,那些需要外蕴状态的操作可以通过调用商业方法以参数形式传入

具体享元角色:实现抽象享元角色所规定的接口,如果有内蕴状态的话,必须负责为内蕴状态提供存储空间,享元对象的内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享

享元工厂角色:本角色负责创建和管理享元角色,本角色必须保证享元对象可以被系统适当地共享,当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个复合要求的享元对象,如果有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。

客户端角色:本角色需要维护一个对所有享元对象的引用,本角色需要自行存储所有享元对象的外蕴状态

 

 

2 ,复合享元模式

单纯享元模式中,所有的享元对象都是单纯享元对象,也就是说都是可以直接共享的。如果将一些单纯享元使用合成模式加以复合,形成复合享元对象,这样的复合享元对象本身不能共享,但是他们可以分解成单纯享元对象,然后可以共享。


                                           构造行模式之享元模式(FLYWEIGHT)