享元模式:运用共享技术有效地支持大量细粒度的对象。
适用场合:假设一个应用程序适用了大量的对象。而大量的这些对象造成了非常大的存储开销时就应该考虑使用。
首先定义一个IFlyweight接口
public interface IFlyweight {
public void operation(int extrinsicstate);
}
接着定义一个ConcreteFlyweight继承IFlyweight
public class ConcreteFlyweight implements IFlyweight{
@Override
public void operation(int extrinsicstate) {
System.out.println("详细flyweight:"+extrinsicstate);
}
}
再定义一个UnsharedConcreteFlyweight继承IFlyweight
public class UnsharedConcreteFlyweight implements IFlyweight{
@Override
public void operation(int extrinsicstate) {
System.out.println("不共享的详细flyweight:"+extrinsicstate);
}
}
然后定义一个FlyweightFactory
public class FlyweightFactory {
Map<String, IFlyweight> flyweights=new HashMap<String,IFlyweight>();
public FlyweightFactory(){
flyweights.put("x", new ConcreteFlyweight());
flyweights.put("y", new ConcreteFlyweight());
flyweights.put("z", new ConcreteFlyweight());
}
public IFlyweight getFlyweight(String key){
return flyweights.get(key);
}
}
client代码
public static void main(String[] args) {
//享元模式
int extrinsicstate=22;
FlyweightFactory factory=new FlyweightFactory();
IFlyweight fx=factory.getFlyweight("x");
fx.operation(--extrinsicstate);
IFlyweight fy=factory.getFlyweight("y");
fy.operation(--extrinsicstate);
IFlyweight fz=factory.getFlyweight("z");
fz.operation(--extrinsicstate);
IFlyweight uf=new UnsharedConcreteFlyweight();
uf.operation(--extrinsicstate);
}