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

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();
}
主站蜘蛛池模板: 延长县| 夹江县| 沁阳市| 普安县| 重庆市| 隆德县| 益阳市| 绥滨县| 永善县| 鄂州市| 武汉市| 土默特左旗| 专栏| 武城县| 漾濞| 竹溪县| 白沙| 安义县| 丹棱县| 油尖旺区| 定远县| 九江市| 阳山县| 永仁县| 永川市| 乌鲁木齐县| 寻乌县| 平邑县| 灯塔市| 杨浦区| 固始县| 泸西县| 仁化县| 安丘市| 沾化县| 常熟市| 大厂| 松潘县| 凉山| 旬阳县| 丰原市|