定义
运用共享技术有效率地支持大量细粒度的对象。
类图
代码
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;
}
}
场景
线程池技术。