«Заменить условное выражение на полиморфизм» элегантно только тогда, когда тип объекта, для которого вы выполняете оператор switch / if, уже выбран для вас. В качестве примера у меня есть веб-приложение, которое считывает параметр строки запроса под названием «действие». Действие может иметь значения «просмотр», «редактирование», «сортировка» и т. Д. Итак, как мне реализовать это с помощью полиморфизма? Что ж, я могу создать абстрактный класс под названием BaseAction и унаследовать от него ViewAction, EditAction и SortAction. Но не надо t Мне нужно условное выражение, чтобы решить, какой вариант типа BaseAction создавать? Я не понимаю, как можно полностью заменить условные выражения полиморфизмом. Во всяком случае, условные выражения просто подталкиваются к началу цепочки.
РЕДАКТИРОВАТЬ:
public abstract class BaseAction
{
public abstract void doSomething();
}
public class ViewAction : BaseAction
{
public override void doSomething() { // perform a view action here... }
}
public class EditAction : BaseAction
{
public override void doSomething() { // perform an edit action here... }
}
public class SortAction : BaseAction
{
public override void doSomething() { // perform a sort action here... }
}
string action = "view"; // suppose user can pass either "view", "edit", or "sort" strings to you.
BaseAction theAction = null;
switch (action)
{
case "view":
theAction = new ViewAction();
break;
case "edit":
theAction = new EditAction();
break;
case "sort":
theAction = new SortAction();
break;
}
theAction.doSomething(); // So I don't need conditionals here, but I still need it to decide which BaseAction type to instantiate first. There's no way to completely get rid of the conditionals.