设计模式之亨元模式(Flyweight Pattern)
2020-05-16 本文已影响0人
杨斌_1024
概述
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的具体工厂 测试结果应用场景
系统中存在大量相同或相似的对象,这些对象耗费大量的内存资源。
大部分的对象可以按照内部状态进行分组,且可将不同部分外部化,这样每一个组只需保存一个内部状态。
由于享元模式需要额外维护一个保存享元的数据结构,所以应当在有足够多的享元实例时才值得使用享元模式。