На днях я просматривал цепочку ответственности и наткнулся на этот пример.
По сути, есть абстрактный обработчик, а затем есть конкретные обработчики, каждый из которых реализует метод дескриптора родительского абстрактного обработчика. Реализация такова, что сначала идет проверка, может ли данный конкретный обработчик обработать текущий запрос, а если нет, то он передает запрос своему преемнику.
Теперь я мог бы сделать то же самое, используя простой условный блок if-else. Чтобы взять первый пример из приведенной выше ссылки, вот как я бы его изменил:
class SingleHandler
{
if(request > 0 && request <= 10)
{
// Process request
}
else if(request > 10 && request <= 20)
{
// Process request differently
}
else if(request > 20 && request <= 30)
{
// Process request differently
}
}
Теперь мой вопрос: в чем принципиальная разница между ними? Есть ли какая-то конкретная причина, по которой я должен вообще использовать цепочку ответственности, если я могу обеспечить точно такую же функциональность, используя блоки if-else? Какой из них лучше с точки зрения производительности, потребления памяти, ремонтопригодности, масштабируемости?