Шаблоните за дизайн са важен инструмент в арсенала на разработчика, тъй като се базират на фундаменталните принципи на проектирането. Появата на нови конструкции в съвременните езици за програмиране правят едни шаблони по-важни, а важността на други намалява.
В книгата ще намерите подробно описание на класическите шаблони за дизайн. Разглеждат се по няколко възможни подхода за реализирането на отделните шаблони – от класическите, до тези, които са по-подходящи за платформата .NET. Също така ще изучите принципите за проектиране, известни под съкращението SOLID, и ще се научите да ги прилагате при разработването на собствени приложения.
В качеството на целева платформа се използват .NET Framework и езика C#. Част от материала е силно обвързана с особеностите на платформата и езика за програмиране. Въпреки това, ако вашият основен език е C++ или Java, книгата пак ще ви бъде полезна, тъй като съществена част от нея е посветена на въпроси на дизайна, които не зависят пряко от езика на програмиране.
Съдържание
Шаблони за дизайн на платформата .NET…9
За автора…9
Към кого е насочена тази книга?…10
Как трябва да се чете тази книга?…11
Отзиви…11
Благодарности…12
Предисловие…13
GoF шаблоните на платформата .NET…13
Отношението към шаблоните за дизайн…14
Фреймуъркове за шаблони…16
Гъвкавост vs. конкретност…17
Кому е нужна още една книга за шаблоните?…18
Част I Поведенчески шаблони
Глава 1. Шаблонът „Стратегия“ (Strategy)…20
Мотивация…20
Варианти за реализация в .NET …22
Обсъждане на шаблона “Стратегия”…24
Приложение…27
Примери в .NET Framework…28
Глава 2. Шаблонът „Шаблонен метод“ (Template Method)…29
Мотивация…29
Варианти на реализация в .NET …31
Обсъждане на шаблона “Шаблонен метод”…36
Приложение…42
Примери в .NET Framework…43
Допълнителна информация…43
Глава 3. Шаблонът „Посредник“ (Mediator)…50
Мотивация…50
Обсъждане на шаблона “Посредник”…53
Приложение…60
Кога третият е излишен?…60
Примери в .NET Framework…61
Глава 4. Шаблонът „Итератор“ (Iterator)…62
Мотивация…62
Обсъждане…64
Използване на итератори в цикъла foreach…71
Приложение…76
Примери в .NET Framework …77
Глава 5. Шаблонът „Наблюдател“ (Observer)…78
Общи сведения…78
Мотивация…79
Варианти на реализация…81
Обсъждане на шаблона “Наблюдател”…87
Наблюдател във вид на специализиран интерфейс…89
Приложение…93
Примери в .NET Framework …94
Глава 6. Шаблонът „Посетител“ (Visitor)…95
Мотивация …95
Обсъждане…99
Приложение…106
Примери в .NET Framework …107
Глава 7. Други поведенчески шаблони…108
Шаблонът “Команда”…108
Шаблонът “Състояние”…110
Шаблонът “Верига отговорности”…112
Примери в .NET Framework…114
ЧАСТ II Създаващи шаблони
Глава 8. Шаблонът „Сек“ (Singleton)…118
Мотивация…118
Варианти за имплементация в .NET…119
Обсъждане на шаблона “Сек”…125
Приложение: шаблон или антишаблон…131
Примери в .NET Framework …132
Допълнителни връзки…133
Глава 9. Шаблонът „Абстрактна фабрика“ (Abstract Factory)…134
Мотивация …134
Обсъждане на шаблона “Абстрактна фабрика”…138
Приложение на шаблона “Абстрактна фабрика”…140
Примери в .NET Framework …141
Глава 10. Шаблонът „Метод Фабрика“ (Factory Method)…142
Мотивация…142
Диаграма на шаблона “Метод Фабрика”…144
Варианти на реализация…146
Обсъждане на шаблона “Метод фабрика”…149
Приложение на шаблона “Метод фабрика”…154
Примери в .NET Framework …156
Глава 11. Шаблонът „Строител“ (Builder)…157
Мотивация…157
Особености на реализацията в .NET …161
Обсъждане на шаблона “Строител”…163
Приложение …170
Примери в .NET Framework…171
Допълнителна информация…171
ЧАСТ III Структурни шаблони
Глава 12. Шаблонът „Адаптер“ (Adapter)…186
Мотивация…186
Обсъждане на шаблона “Адаптер”…189
Приложение …194
Примери в .NET Framework …194
Глава 13. Шаблонът „Фасада“ (Facade)…196
Мотивация…196
Обсъждане на шаблона “Фасада”…198
Приложение…199
Примери в .NET Framework …199
Глава 14. Шаблонът „Декоратор“ (Decorator)…201
Мотивация…201
Обсъждане на шаблона “Декоратор”…205
Приложение …209
Примери в .NET Framework …210
Допълнителна информация…210
Глава 15. Шаблонът „Композиция“ (Composite)…215
Мотивация…215
Обсъждане на шаблона “Композиция”…220
Приложение …221
Примери в .NET Framework …222
Глава 16. Шаблонът „Пълномощно“ (Proxy)…223
Мотивация…223
Обсъждане на шаблона “Пълномощно”…225
Приложение …228
Примери в .NET Framework …228
Част IV Принципи за дизайн
Глава 17. Принцип за единствена отговорност…233
За какво е необходим SRP?…235
Принципът за единствена отговорност в практиката…236
Типични примери за нарушаване на SRP…244
Изводи…245
Глава 18. Принцип „отворен/затворен“…246
Бъркотията с определенията…247
Какъв проблем е призван да реши принципът “отворен/затворен”?…251
Принципът “отворен/затворен” в практиката…252
Разширяемост: обектно ориентиран и функционален подход…259
Типични примери за нарушаване на принципа “отворен/затворен”…262
Изводи…263
Глава 19. Принцип на заместване на Лисков…264
За какво е необходим принципът на заместване на Лисков?…266
Класически пример за нарушаване: квадрати и правоъгълници…267
Принципът на заместване на Лисков и контрактите . 269
За сложностите на наследяването в реалния свят …270
Допълнителна информация…271
Кога наследяването е прекалено малко?…274
Принципът на заместване на Лисков в практиката…276
Типични примери за нарушаване на LSP…279
Изводи…280
Допълнителни връзки…281
Глава 20. Принцип за разделяне на интерфейсите…282
За какво е необходим принципът за разделяне на интерфейсите?…283
SRP vs. ISP…286
Принципът за разделяне на интерфейсите в практиката…287
Типични примери за нарушаване на ISP…290
Изводи…291
Глава 21. Принцип за обръщане на зависимостите…292
Интерфейси …292
Слоеве…294
Наблюдатели…296
За какво служи принципът за обръщане на зависимостите?…299
Пазете се от неправилно разбиране на DIP…301
Тестване на решението vs. накърняване на капсулацията…302
Принципът на обръщане на зависимостите в практиката…304
Примери за нарушаване на принципа на обръщане на зависимостите…309
Изводи…309
Допълнителна информация…309
Допълнителни връзки…314
Глава 22. Размисли за принципите за дизайн…315
Използване на принципите за дизайн…317
Правилно използване на принципите за дизайн…319
Антипринципи за дизайн…321
Заключение…322
Източници на информация …324
Книги за дизайн и ООП…324
Статии…328