Нарушает ли GWT ActivityMapper принцип подстановки Лискова? - PullRequest
1 голос
/ 03 декабря 2011

В моем приложении 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 являются частью инфраструктуры, и интерфейс подразумевает, что это именно такбыть использованным.

Однако, согласно принципу подстановки Лискова , метод, который принимает тип, но выполняет проверку типа для подклассов, чтобы вывести, какое действие предпринять, является нарушением принципа.

Интерфейс ActivityMapper GWT по своей природе поощряет нарушение LSP?Или есть другой LSP-совместимый способ кодирования этого метода, о котором я не задумывался?

1 Ответ

1 голос
/ 03 декабря 2011

Роль ActivityMapper состоит в том, чтобы сопоставить Place с Activity, где правила отображения оставлены полностью свободными.
Что делает каскад if / else таким, что Java не поддерживает многократную диспетчеризацию , но, по моему мнению, это не означает, что он нарушает LSP (или, по крайней мере, у вас нет другого выбор в Java, так что это не проблема; вы можете использовать шаблон посетителя - это то, что генерирует Spring Roo, - но это ничего не меняет).

...