(十二)享元模式

public interface FlyWeight {
	String getName();
	void setName(String name);
	void execute();
}

public class ConcreteFlyweight implements Flyweight {
	private String name;
	public ConcreteFlyweight(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void execute() {
		System.out.println("执行功能逻辑");
	}
}

public class FlywenghtFactory {
	private Map<String, Flyweight> cachePool = new HashMap<String, Flyweight>();
	public Flyweight get(String name) {
		Flyweight flyweight = cachePool.get(name);
		if(flyweight == null) {
			flyweight = new ConcreteFlyweight(name);
			cachePool.put(name, flyweight);
		}
		return flyweight;
	}
	
}

使用时,从工厂中拿某个对象,如果拿不到则添加进去再拿到
然后执行该对象的功能逻辑
其实这就是在代码中做了一个这个对象的Map缓存池子,相同的对象不会重复的new,会直接从map中取到

Flyweight flyweight = FlyweightFactory.get("对象1");
flyweight.execute();

享元一般用于,系统中某些需要缓存的对象,数量比较少,不需要用redis这种重型的缓存,就上这种map缓存
需要注意的是线程安全问题

你可能感兴趣的:(设计模式)