- Published on
flyweight 代理模式
一个享元模式的常见使用场景,其实就是jvm内缓存实现,如果我们不想引入ehcache之类缓存框架,就想简单一点,通过自己实现的一个map来缓存对应的一些数据,比如说每个权限的数据,或者每个员工的数据,在内存里自己维护一个缓存工厂,就是基于享元模式的思想来实现的。
场景
- 我们现在要缓存一些数据,比如说权限,根据权限的ID作为key,权限数据自己本身是value
- 但是我们不需要使用太复杂的ehcache框架之类的去使用,特别特别的简单的
- 我们就想基于自己的Map去实现一套东西
package wang.jinggo.basics.zhss.flyweight;
import java.util.HashMap;
import java.util.Map;
/**
* @author: wangyj
* @create: 2021-10-24
* @version: 1.0.0
**/
public class FlyweightPatternDemo {
public static void main(String[] args) {
Flyweight flyweight1 = FlyweightFactory.get("对象1");
flyweight1.execute();
Flyweight flyweight2 = FlyweightFactory.get("对象1");
flyweight2.execute();
System.out.println(flyweight1 == flyweight2);
// 享元
// 享受,元数据
// 同一个数据,我就认为是一个元数据,整个系统里这个数据就一份,缓存起来
// 整个系统对这个数据,全部享受他一个对象实例即可
// 直接既有内存来缓存一块数据,用享元模式
}
public static interface Flyweight {
void execute();
String getName();
void setName(String name);
}
public static class ConcreteFlyweight implements Flyweight {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ConcreteFlyweight(String name) {
super();
this.name = name;
}
public void execute() {
System.out.println(name + "执行功能逻辑");
}
}
public static class FlyweightFactory {
private static Map<String, Flyweight> cachePool = new HashMap<String, Flyweight>();
public static Flyweight get(String name) {
Flyweight flyweight = cachePool.get(name);
if(flyweight == null) {
flyweight = new ConcreteFlyweight(name);
cachePool.put(name, flyweight);
}
return flyweight;
}
}
}