[Design] Flyweight Pattern

  结构模式 

  结构模式描述如何将类或者类的对象结合在一起形成更大的结构。
  结构模式描述两种不同的东西:类与类的实例。结构模式可以分为:类的结构模式和对象的结构模式两种。
  类的结构模式:类的结构模式使用继承来把类、接口等组合在一起,以形成更大的结构。类的结构模式是静态的,比如类形式的适配器模式。
  对象的结构模式:对象的结构模式描述怎么样把不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。比如代理人模式。

--------------------------------------------------------------------------------------


享元(Flyweight)模式

  享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。根据享元对象的内部表象,享元模式可以分成单纯享元模式和复合享元模式两种形 式。享元对象不一定非要是不变对象。一个享元对象之所以能够共享,是因为它只含有可以共享的状态,而没有不可以共享的状态,这是应用享元模式的前提。享元 工厂实际上提供了一个缓存机制,判断对象是否存在然后创建或直接返回对象。

优缺点

使用享元模式可以大幅度降低内存中对象的数量。但是为了可以享元,需要将一些状态外部化, 这使得程序逻辑变的复杂,而且读取外部状态使得运行时间稍微变长。


单纯享元模式结构


1.    抽象享元角色

所有具体享元角色的基类。

2.    具体享元角色

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

3.    享元工厂角色

负责创建和管理享元角色。保证享元对象可以被适当的共享,检查系统中是否有复合要求的对象。如果要直接近回,否则创建并返回。

4.    客户端角色

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

复合享元模式结构


1.    抽象享元角色

所有具体享元角色的基类。

2.    具体享元角色

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

3.    复合享元角色

此角色所代表的对象是不可以共享的,但可分解成多个本身可以共享的单纯享元对象。又称不可共享的享元对象。

4.    享元工厂角色

负责创建和管理享元角色。保证享元对象可以被适当的共享,检查系统中是否有复合要求的对象。如果要直接近回,否则创建并返回。

5.    客户端角色

本角色需要自行存储所有享元对象的外蕴状态。


原文地址:https://www.cnblogs.com/abeen/p/1437651.html