207享元模式

67 阅读1分钟

定义

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

类图

图片1.png

代码

public class FlyWeightPattern {
    public static void main(String[] args) {
        BikeFlyWeight bike1 = BikeFlyWeightFactory.getInstance().getBike();
        bike1.ride("tome");
        BikeFlyWeight bike2 = BikeFlyWeightFactory.getInstance().getBike();
        bike1.ride("jack");
        BikeFlyWeight bike3 = BikeFlyWeightFactory.getInstance().getBike();
        bike1.ride("peter");
        System.out.println(bike1==bike2);
        System.out.println(bike2==bike3);
    }
}
abstract class BikeFlyWeight{
    // 内部状态
    protected Integer state = 0;
    // username 外部状态
    abstract void ride(String name);
    abstract void back();
    public Integer getState(){
        return state;
    }
}


class MoBikeFlyWeight extends BikeFlyWeight{
   // 定义新的内部状态,车牌号
    private String bikeId;
    public MoBikeFlyWeight(String bikeId){
        this.bikeId=bikeId;
    }
    @Override
    void ride(String userName) {
        state =1;
        System.out.println(userName+" "+bikeId);
    }
    @Override
    void back() { state=0; }
}
class BikeFlyWeightFactory{
    private static BikeFlyWeightFactory instance = new BikeFlyWeightFactory();
    private Set<BikeFlyWeight> pool = new HashSet<>();
    public static BikeFlyWeightFactory  getInstance(){
        return instance;
    }
    private BikeFlyWeightFactory(){
        for(int i=0;i<2;i++){
            pool.add(new MoBikeFlyWeight(i+"----"));
        }
    }
    public BikeFlyWeight getBike(){
        for(BikeFlyWeight bike: pool)
            if(bike.getState()==0)
                return bike;
            return null;
        }
}

场景

线程池技术。