享元模式
使用共享元对象可以有效的支持大量的细粒度对象,本质就是将对象分离和共享
增加缓存,缓存那些不变且重复的数据,这些数据称为对象的内部状态,变化的数据不进行缓存,称为对象的外部状态,在实现的时候,把内部状态分离出来共享称为享元,把外部状态分离出来,放到外部,在需要的时候传递给享元对象使用,为了控制对内部状态的共享,并且让外部能简单地使用共享数据,提供一个工厂来管理享元,称为享元工厂
文章共享文字对象
核心概念
- Flyweight 享元接口,通过该接口可以接受并作用于外部状态
- ConcreteFlyweight 具体的享元实现对象,封装Flyweight的内部状态
- UnsharedConcreteFlyweight 非共享的享元实现对象
- FlyweightFactory 享元工厂,用来创建并管理共享的享元对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
public interface Flyweight {
void operation(String state); }
public class ConcreteFlyweight implements Flyweight {
private String innerState;
public ConcreteFlyweight(String state){ this.innerState = state; }
@Override public void operation(String state) { } }
public class UnsharedConcreteFlyweight implements Flyweight{
private String allState; @Override public void operation(String state) {
} }
public class FlyweightFactory {
private Map<String,Flyweight> fsMap = new HashMap<>();
public Flyweight get(String key){ Flyweight flyweight = fsMap.get(key);
if(flyweight == null){ flyweight = new ConcreteFlyweight(key); fsMap.put(key,flyweight);
} return flyweight; } }
|
使用场景
- 一个应用程序使用了大量的对象,造成了很大的存储开销