Я настоятельно рекомендую изучить эти паттерны (см. книгу «Design Patterns: Elements of Reusable Object-Oriented Software»1) и использовать их в коде, чтобы сделать его более простым в обслуживании и масштабировании — да и просто более качественным. С другой стороны, их следует применять с осторожностью, потому что реализация этих паттернов сильно зависит от контекста. Как вы уже поняли, я пытаюсь показать, что каждое решение в программном продукте подразумевает компромиссы и имеет последствия.