享元模式
通过共享避免大量相同对象的开销。简单说就是共享对象。
结构图
源代码
public interface Flyweight {
//一个示意性方法,参数state是外蕴状态
public void operation(String state);
}
public class ConcreteFlyweight implements Flyweight {
private Character intrinsicState = null;
/**
* 构造函数,内蕴状态作为参数传入
*/
public ConcreteFlyweight(Character state){
this.intrinsicState = state;
}
/**
* 外蕴状态作为参数传入方法中,改变方法的行为,
* 但是并不改变对象的内蕴状态。
*/
@Override
public void operation(String state) {
System.out.println("Intrinsic State = " + this.intrinsicState);
System.out.println("Extrinsic State = " + state);
}
}
public class FlyweightFactory {
private Map<Character,Flyweight> files = new HashMap<Character,Flyweight>();
public Flyweight factory(Character state){
//先从缓存中查找对象
Flyweight fly = files.get(state);
if(fly == null){
//如果对象不存在则创建一个新的Flyweight对象
fly = new ConcreteFlyweight(state);
//把这个新的Flyweight对象添加到缓存中 files.put(state, fly);
}
return fly;
}
}
public class Client {
public static void main(String[] args) {
FlyweightFactory factory = new FlyweightFactory();
Flyweight fly = factory.factory('a');
fly.operation("First Call");
fly = factory.factory('b');
fly.operation("Second Call");
fly = factory.factory('a');
fly.operation("Third Call");
}
}
很多地方将享元模式有分成 单纯享元模式,不共享享元模式, 复合享元模式,究其根本没有本质区别。
欢迎关注我的微信公众号: