一、 定义
享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。
应用:1)如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用
2)对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,可以考虑使用享元模式。
二、 结构图
三、 示例代码
package org.example.flyweightmodel;
public abstract class FlyWeight {
private int instate;
private int exstate;
public abstract void ExOpration(int exstate);
public int getInstate() {
return instate;
}
public void setInstate(int instate) {
this.instate = instate;
}
public int getExstate() {
return exstate;
}
public void setExstate(int exstate) {
this.exstate = exstate;
}
}
package org.example.flyweightmodel;
public class JDWebsite extends FlyWeight {
@Override
public void ExOpration(int exstate) {
System.out.println("JD website");
}
}
package org.example.flyweightmodel;
public class TMWebsite extends FlyWeight {
@Override
public void ExOpration(int exstate) {
System.out.println("TM website");
}
}
package org.example.flyweightmodel;
public class UnFlyweightWebsite extends FlyWeight {
@Override
public void ExOpration(int exstate) {
System.out.println("unflyweight website");
}
}
package org.example.flyweightmodel;
import java.util.HashMap;
public class FlyWeightFactory {
private HashMap<String,FlyWeight> fpool = new HashMap<>();
public FlyWeight getFlyWeight(String key){
FlyWeight flyWeight = null;
if (fpool.containsKey(key))
return fpool.get(key);
else {
if (key == "JD"){
flyWeight = new JDWebsite();
fpool.put(key,flyWeight);
}else if (key == "TM"){
flyWeight = new TMWebsite();
fpool.put(key,flyWeight);
}
}
return flyWeight;
}
}
package org.example.flyweightmodel;
public class FlyweightModelTest {
public static void main(String[] args) {
FlyWeightFactory flyWeightFactory = new FlyWeightFactory();
FlyWeight jd = flyWeightFactory.getFlyWeight("JD");
FlyWeight tm = flyWeightFactory.getFlyWeight("TM");
jd.ExOpration(1);
tm.ExOpration(2);
}
}