Коллекция интерфейсов для выбора, Java
Считайте, что объект, завернутый в DataContainer
, будет передан клиенту
// Will be handed out
public interface DataContainer
Чтобы использовать его, клиент в настоящее время должен знать, чтобы привести объект к:
public interface ConcreteObject_1_Container extends DataContainer
public interface ConcreteObject_2_Container extends DataContainer
Можно ли предложить и ConcreteObject1Container
, и ConcreteObject2Container
в качестве вариантов для выбора, подобно тому, как можно выбрать варианты Enum
?
Вместо пользователь магически знает, как использовать FileContainer
// user knows
FileContainer fileContainer = (FileContainer)
ContainerFactory.getContainerFor(DataSource.FILE,
TREAT_AS_SOURCE);
Я бы хотел
// user selects
FileContainer fileContainer = (GenericContainer.FileContainer)
ContainerFactory.getContainerFor(DataSource.FILE,
TREAT_AS_SOURCE);
2 ответа:
Вероятно, вам следует изменить свой дизайн. Либо:
- клиент просто использует методы на
DataContainer
, не заботясь о том, какая это реализация, и в этом случае приведения можно избежать, или- клиент фактически связан с реализацией, поэтому следует просто использовать типы реализации напрямую (например, с двумя различными методами)