享元模式
Flyweight
public interface Flyweight {
public void operation(UnsharedConcreteFlyweight state);
}
ConcreteFlyweight
public class ConcreteFlyweight implements Flyweight {
private String key;
public ConcreteFlyweight(String key) {
this.key = key;
System.out.println("具体享元"+key+"被创建");
}
@Override
public void operation(UnsharedConcreteFlyweight outState) {
System.out.println("具体享元"+key+"被调用");
System.out.println("非享元信息是"+outState.getInfo());
}
}
FlyweightFactory
public class FlyweightFactory {
private HashMap<String,Flyweight> flyweightHashMap = new HashMap<String, Flyweight>();
public Flyweight getFlyweight(String key) {
Flyweight flyweight = flyweightHashMap.get(key);
if(flyweight != null){
System.out.println("具体享元"+key+"已经存在!");
}else{
flyweight = new ConcreteFlyweight(key);
flyweightHashMap.put(key,flyweight);
}
return flyweight;
}
}
UnsharedConcreteFlyweight
public class UnsharedConcreteFlyweight {
private String info;
public UnsharedConcreteFlyweight(String info) {
this.info = info;
}
public void setInfo(String info){
this.info = info;
}
public String getInfo() {
return info;
}
}
test
public class test {
public static void main(String[] args)
{
FlyweightFactory factory=new FlyweightFactory();
Flyweight f01=factory.getFlyweight("a");
Flyweight f02=factory.getFlyweight("a");
Flyweight f03=factory.getFlyweight("a");
Flyweight f11=factory.getFlyweight("b");
Flyweight f12=factory.getFlyweight("b");
f01.operation(new UnsharedConcreteFlyweight("第1次调用a。"));
f02.operation(new UnsharedConcreteFlyweight("第2次调用a。"));
f03.operation(new UnsharedConcreteFlyweight("第3次调用a。"));
f11.operation(new UnsharedConcreteFlyweight("第1次调用b。"));
f12.operation(new UnsharedConcreteFlyweight("第2次调用b。"));
}
}
输出