Зачем вообще специально учить паттерны, если большинство из них и так интуитивно понятны при достаточном понимании архитектуры языка и достаточном уровне квалификации и опыта? Зачем мне знать название для решения, которое я сам спокойно придумал и прекрасно осведомлен о его плюсах и минусах? Что мне оно даст, слово это? Я открою статью с названием паттерна и внезапно узнаю о каких-то невиданных и доселе неизвестных мне свойствах абстрактных классов, наследования или композиции?
Мне не нравится пример, где специально приводится настолько разная ответственность двух методов класса — один вычисляет площадь, а другой рисует. В реальности тут и там встречаются случаи, когда грань между двумя ответственностями настолько тонкая, что вопрос ее разделения является скорее философским, нежели каким-то прикладным. И зачастую бывает так, что для одной и той же сущности приходится писать два разных класса, потому что single responsibility, хотя это кажется странным, сущность одна, а классов два (или больше). Как кошка в двух экземплярах, один экземпляр умеет eat(), другой poop() и обоим в конструкторе передается DigestiveSystem DSystem = new DigestiveSystem
— Добрый день! Почём мороженое?
— Вот же ценник!
— Хорошо, дайте мне дыню.
— Закончилась.
— Арбуз?
— Тоже.
— Ладно, тогда банан.
— 20 рублей.
— Но в ценнике написано 15.
— Это старая цена, не успели перепечатать.
— Ладно, а крем-брюле почем?
— В ценнике написано же!
— Вот же ценник!
— Хорошо, дайте мне дыню.
— Закончилась.
— Арбуз?
— Тоже.
— Ладно, тогда банан.
— 20 рублей.
— Но в ценнике написано 15.
— Это старая цена, не успели перепечатать.
— Ладно, а крем-брюле почем?
— В ценнике написано же!