作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
学习必须往深处挖,挖的越深,基础越扎实!
享元模式
享元模式的定义:
使用共享对象可以有效的支持大量的明细粒度的对象
享元模式是以共享的方式高效的支持大量的细粒度的对象,而享元模式能做到共享的关键是区分内部状态和外部状态。
- 内部状态:内部状态是存储在享元对象内部的,可以共享的信息,并且这些信息不会随着环境的改变而改变
- 外部状态:外部状态是对象得以依赖的标记,外部状态是随环境改变而改变且不可以共享的状态
享元模式的参与角色
- Flyweight 抽象享元角色:该角色对享元类进行抽象,同时定义对象的外部状态和内部状态的接口或实现
- ConcreteFlyweight 具体享元角色:该角色实现抽象享元定义定义业务,同时享元对象的内部状态必须与环境无关,从而使得享元对象可以在系统内共享。
- FlyweightFactory 享元工厂:该角色构造一个池容器负责创建和管理享元角色,并提供从池中获得对象的方法
享元模式的简单示例

抽象享元角色
public abstract class Flyweight {
private String innerState;
protected final String extrernalState;
public Flyweight(String externalState) {
this.extrernalState = externalState;
}
public abstract void operation();
public String getInnerState() {
return this.getInnerState();
}
public void setInnerState(String innerState) {
this.innerState = innerState;
}
}
具体享元角色
public class ConcreteFlyweight extends Flyweight{
public ConcreteFlyweight(String externalState) {
super(externalState);
// TODO Auto-generated constructor stub
}
@Override
public void operation() {
// TODO Auto-generated method stub
}
}
享元工厂
public class FlyweightFactory {
private static HashMap<String,Flyweight> pool = new HashMap();
public static Flyweight getFlyweight(String external) {
Flyweight fly = null;
if(pool.containsKey(external)) {
fly = pool.get(external);
}else {
fly = new ConcreteFlyweight(external);
pool.putIfAbsent(external, fly);
}
return fly;
}
}
享元模式的优缺点和使用场景
享元模式的优点:
- 减少应用程序创建的对象
- 降低程序的内存占用
- 增强了程序性能
享元模式的使用场景
- 系统中存在大量的相似对象
- 细粒度的对象都具备接近的
- 需要缓冲池的场景
628

被折叠的 条评论
为什么被折叠?



