# Обектно-ориентирано програмиране - 2 част

{% hint style="info" %}
Примерни проекти: <https://github.com/theVelislavKolesnichenko/DesignPrinciples>
{% endhint %}

**Дизайнерските модели** са типични решения на често срещани проблеми в софтуерния дизайн. Те са като предварително направени чертежи, които могат да се персонализират, за да се разрешат повтарящи се проблеми с дизайна в програмния код.

Не можете просто да намерите шаблон и да го копирате в програмата си, по начина, по който можете с готови функции или библиотеки. Моделът не е конкретна част от кода, а обща концепция за решаване на конкретен проблем. Можете да следвате детайлите на модела и да внедрите решение, което отговаря на реалностите на вашата собствена програма.

Моделите често се бъркат с алгоритмите, защото и двете понятия описват типични решения на някои известни проблеми. Докато алгоритъмът винаги дефинира ясен набор от действия, които могат да постигнат някаква цел, моделът е описание на решение на по-високо ниво. Кодът на един и същ модел, приложен към две различни програми, може да бъде различен.

Аналогия на алгоритъма е рецепта за готвене: и двете имат ясни стъпки за постигане на цел. От друга страна, моделът е по-скоро като план: можете да видите какъв е резултатът и неговите характеристики, но точният ред на изпълнение зависи от вас.
