意图: 有大量对象需要创建,如果是同一个对象,不同状态,只创建一个对象实例,节约内存空间
角色:抽象类,具体类,工厂
ShareBike
public abstract class ShareBike {
//公共的部分
//这里给个默认值
protected String color = "蓝色";
protected String brand = "Mobike";
public void setBrand(String brand) {
this.brand = brand;
}
public void setColor(String color) {
this.color = color;
}
public abstract void run(String name);
}
ShareBikeImpl
public class ShareBikeImpl extends ShareBike {
@Override
public void run(String name) {
System.out.println(name+" , brand is:"+ this.brand+", color is:"+this.color);
}
}
ShareBikeFactory
public class ShareBikeFactory {
private Map<String, ShareBike> stringShareBikeMap = new HashMap<>();
public ShareBike factory(String name){
ShareBike shareBike = stringShareBikeMap.get(name);
if(shareBike == null){
shareBike = new ShareBikeImpl();
stringShareBikeMap.put(name, shareBike);
}
return shareBike;
}
}
测试
ShareBikeFactory shareBikeFactory = new ShareBikeFactory();
ShareBike shareBike = shareBikeFactory.factory("OFO");
shareBike.setBrand("OFO");
shareBike.setColor("黄色");
shareBike.run("小明");
shareBike = shareBikeFactory.factory("OFO");
shareBike.run("小马");
shareBike = shareBikeFactory.factory("Mobike");
shareBike.run("小张");
输出
小明 , brand is:小黄车, color is:yello
小马 , brand is:小黄车, color is:yello
小张 , brand is:摩拜, color is:蓝色