设计模式之亨元模式(Flyweight Pattern)

概述

The Flyweight pattern is applied if lots of objects from one class need to be constructed. In this case objects are shared to reduce the memory load.

亨元模式(不知道为啥取了这么个怪名字):是指如果一个类存在好多相似实例,我们可以通过亨元模式来reuse已经存在的对象,减少内存开销。

享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。

享元模式的结构与实现

享元模式中存在以下两种状态:

内部状态,即不会随着环境的改变而改变的可共享部分;(亨元角色)

外部状态,指随环境改变而改变的不可以共享的部分(非亨元角色)。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。

本文类图

比如,我们需要有个需求:画出多种颜色的线条。颜色是随环境改变而改变的不可以共享的部分(非亨元角色),线条是不会随着环境的改变而改变的可共享部分(亨元角色)

这是完全亨元模式,也就是说,如果匹配了颜色,返回亨元对象。本案例中不存在(非亨元角色)

本文类图

主要代码

非共享部分(非亨元角色)
亨元角色(可以共享的部分)
getLine用来实现reuse的具体工厂
测试结果

应用场景

系统中存在大量相同或相似的对象,这些对象耗费大量的内存资源。

大部分的对象可以按照内部状态进行分组,且可将不同部分外部化,这样每一个组只需保存一个内部状态。

由于享元模式需要额外维护一个保存享元的数据结构,所以应当在有足够多的享元实例时才值得使用享元模式。

PS

单纯亨元模式
复合享元模式

参考亨元模式,单纯亨元模式和复合亨元模式,本文代码GitHub地址

你可能感兴趣的:(设计模式之亨元模式(Flyweight Pattern))