官术网_书友最值得收藏!

Simple factory with class registration using Product.newInstance

In the previous code, we used reflection to instantiate new vehicles. If we have to avoid reflection, we can use a similar factory where to register the new vehicle classes the factory should be able to create. Instead of adding classes to the map, we are going to add instances of each type of object we want to register. Each product will be able to create a new instance of itself.

We start by adding an abstract method in the base Vehicle class:

abstract public Vehicle newInstance();

For each product, the method declared abstract in the base class must be implemented:

@Override
public Car newInstance()
{
return new Car();
}

In the factory class, we are going to change the map to keep the IDs of the objects along with the vehicle objects:

private Map<String, Vehicle> registeredProducts = new HashMap<String,Vehicle>();

Then we register a new type of vehicle by passing an instance of it:

public void registerVehicle(String vehicleId, Vehicle vehicle)
{
registeredProducts.put(vehicleId, vehicle);
}

We change the createVehicle method accordingly:

public AbstractProduct createVehicle(String vehicleId) 
{
return registeredProducts.get(vehicleId).newInstance();
}
主站蜘蛛池模板: 怀宁县| 开江县| 山西省| 黄龙县| 福泉市| 区。| 喀什市| 卓尼县| 聂拉木县| 韩城市| 高邑县| 精河县| 廉江市| 恩平市| 巴彦县| 竹北市| 巴南区| 大庆市| 项城市| 方正县| 永顺县| 光山县| 循化| 寿光市| 青阳县| 丰都县| 拉萨市| 桦南县| 荥阳市| 宁强县| 昌宁县| 新巴尔虎左旗| 汝阳县| 浏阳市| 逊克县| 库伦旗| 高雄市| 阜南县| 长岭县| 孝义市| 丰县|