您的位置:首页 > 其它

设计模式(10)享元模式

2019-01-26 11:22 63 查看

定义:运用共享技术有效地支持大量细粒度的对象。

场景:

现在要缓存一些数据,比如说权限,根据权限的ID作为key,权限数据自己本身是value,但是我们不需要使用太复杂的ehcache框架之类的去使用,特别特别的简单的,我们就想基于自己的Map去实现一套东西。

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 interface Flyweight {
void execute();
String getName();
void setName(String name);
}

public static class ConcreteFlyweight implements Flyweight {

private String name;

@Override
public String getName() {
return name;
}

@Override
public void setName(String name) {
this.name = name;
}

public ConcreteFlyweight(String name) {
super();
this.name = name;
}

@Override
public void execute() {
System.out.println(name + "执行功能逻辑");
}
}

public static class FlyweightFactory {

private static Map<String, Flyweight> cachePool = new HashMap<>();

public static Flyweight get(String name) {
Flyweight flyweight = cachePool.get(name);
if(flyweight == null) {
flyweight = new ConcreteFlyweight(name);
cachePool.put(name, flyweight);
}
return flyweight;
}
}
}

应用场景:

维护固定数量的对象实例,不同的对象实例,只有一个,然后保存在内部的一个map中。

常见使用场景,就是jvm内缓存实现,如果我们不想引入ehcache之类缓存框架,就想简单一点,通过自己实现的一个map来缓存对应的一些数据,比如说每个权限的数据,或者每个员工的数据,在内存里自己维护一个缓存工厂,就是基于享元模式的思想来实现的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: