В моем приложении GWT у меня есть такой класс:
public class AppActivityMapper implements ActivityMapper {
@Override public Activity getActivity(Place place) {
if(place instanceof ThisPlace) {
return new ThisActivity((ThisPlace)place);
}
if(place instanceof ThatPlace) {
return new ThatActivity((ThatPlace)place);
}
if(place instanceof AnotherPlace) {
return new AnotherActivity((AnotherPlace)place);
}
// you get the idea
}
}
Объекты ActivityMapper, Activity и Place являются частью фреймворка, и интерфейс подразумевает, что именно так он и предназначен.
Однако, согласно принципу подстановки Лисков, метод, который принимает тип, но не проверка типа для подклассов, чтобы определить, какое действие следует предпринять, является нарушением принципа.
Поощряет ли интерфейс GWT ActivityMapper нарушение LSP по своей природе? Или есть другой LSP-совместимый способ кодирования этого метода, о котором я не подумал?