blob: 6ab36ff75be566d2ec6c8cbcb8a1348263c969ba [file] [log] [blame]
package brooklyn.entity.drivers;
import brooklyn.location.Location;
/**
* A Factory responsible for creating a driver for a given entity/location. The idea is that an entity should not
* be tightly coupled to a specific driver implementation, so that there is flexibility for driver changes, without
* changing the entity itself. The advantage is that drivers can easily be reconfigured, replaced or new drivers for
* different environments can be added, without needing to modify Brooklyn.
*/
public interface EntityDriverFactory {
/**
* Builds a new {@link EntityDriver} for the given entity/location.
*
* @param entity the {@link DriverDependentEntity} to create the {@link EntityDriver} for.
* @param location the {@link Location} where the {@link DriverDependentEntity} is running.
* @param <D>
* @return the creates EntityDriver.
*/
<D extends EntityDriver> D build(DriverDependentEntity<D> entity, Location location);
}