
1. Move Accumulation to Visitor (286)
1.1. kiedy
1.1.1. jeśli bardzo robudowany swich obsługuje dane z wielu interfejsów
1.1.2. kiedy swich pobiera dane z wielu obiektów
1.2. w jaki sposóc
1.2.1. visitor usuwa instrukcje warunkowe i zapewnia większą ogólność kodu
2. Introduce to Null Object (271)
2.1. kiedy
2.1.1. jeśli korzystamy z kodu który wiele razy mam nam nic nie robić
2.1.2. jeśli w rozbudowanych if-ach dużo razy chodzi nam o to aby dostać null
2.2. w jaki sposób
2.2.1. tworzymy klasę przeładowaną pustymi metodami
3. Substitution Algorithm
3.1. kiedy
3.1.1. gdy w systemie robimy coś 1 sposobem i nagle zmieniamy go
3.1.1.1. jedno z takich podejść należy uznać za niespójne
4. Extract class/sub-class
4.1. gdy klasa tworzy zbyt wiele zróżnicowanych egzemplarzy
4.2. gdy klasa jest za duża
5. Replece implicit tree with Composite (165)
5.1. kiedy
5.1.1. jeśli mamy niejawną strukturę drzewiastą i ograniczamy się do typów prostych (jak string)
6. Move Embellishment to Decorator (136)
6.1. kiedy
6.1.1. jeśli wyrażenia warunkowe służą jakiego nietypowego zachowania klasy
6.1.2. jeśli wartości proste istnieją tylko po to aby uzupełnić podstawowe funkcje obiektu
6.2. w jaki sposób
7. Replace Conditional Logic With Strategy (123)
7.1. kiedy
7.1.1. jeśli zbyt długa metoda zawiera instrukcje if, które zmieniają algorytm metody
7.1.2. jeśl rozbudowane instrukcje warunkowe służa do wyboru jednego z wariantów obliczeń
7.1.3. jeśli typy proste decydują o użytych algorytmach i na nich opiera się logika
8. Compose Method (118)
8.1. kiedy
8.1.1. zestaw dobrze nazwanych metod o podobnym poziomie szczegółowości
8.1.1.1. zawsze na początek
8.2. w jaki sposób
8.2.1. metody tak produkowane powinny być wydajne w tym co robią i jak to robią
8.2.1.1. max 10 lini
8.2.1.2. małe
8.2.1.3. proste
9. Inline Singleton (111)
9.1. kiedy
9.1.1. gdy nadużywamy singletonu i dane coraz bardziej zależą od globalnych wartości
9.1.1.1. singletony są kosztowne
9.2. w jaki sposób
9.2.1. tworzymy singleton w klasie i działa sobie on lokalnie a nie globalnie
9.2.2. usuwamy singleton po zakończeniu pracy
10. Emcapsulate Composite with Builder (95)
10.1. kiedy
10.1.1. jeśli utworzyliśmy klasę i jej konstrukcja jest zbyt prosta aby faktycznie ułatwić budowanie klientów
10.2. w jaki sposób
11. Encapsulte Classes with Factory (81)
11.1. kiedy
11.1.1. gdy udostępnia się klientowi metody i klasy, które w rzeczywistości nie powinien on znać.
11.1.1.1. nie musi ich znać, a gdy one są wpływa to na złożoność systemu
11.2. w jaki sposób
11.2.1. tworzymy fabrykę do produkcji obiektów określonego typy i ją udostępniamy
12. More Creation Knowleadge to Factory (71)
12.1. kiedy
12.1.1. gdy zmieniając jedną metodę okazuje się, że musimy robić modyfikację w wielu miejscach
13. Chain Constructors (302)
13.1. kiedy
13.1.1. jeśli kod powtarza się w konstruktorach
13.2. w jaki sposób
14. Move Accumulations to Collecting Parameters (280)
14.1. kiedy
14.1.1. jeżeli kod gromadzi dane do wspólnej zmiennej
14.2. w jaki sposob
15. Replace Type Code with Class (258)
15.1. kiedy
15.1.1. jeśli typ proty decyduje w klasie o logice i nie zapewnia odpowiedniego bezpieczeństwa
16. Replace implicit Language with Interpreter (243)
16.1. kiedy
16.1.1. jeśli wiele metod klasy zapewnia obsługę licznych kombinacji wartości prostych
16.1.2. duża klasa, która w istocie emuluje pewien język
16.1.3. generujemy dziwaczne i w dużej ilości metody mające za zadanie obsługiwać bazę danych
16.2. w jaki sposób
16.2.1. przekształcamy klasę do klasy interpreter
17. Unify interface with Adapter (233)
17.1. kiedy
17.1.1. jeśli przetwarzamy obiekty w inny sposób tylko dlatego że mają inne interfejsy
17.1.2. jeśli dwie klasy mają podobne interfejsy, które moża połączyć w jeden
17.1.3. jeśli istnieje znana metoda do wywoływania zbioru klas, których interfejsy nie są jednolite
17.2. w jaki sposób
18. Replace One/Many Distinction with Composite (203)
18.1. kiedy
18.1.1. jeśli jeden kod przetwarza kolekcję, a jeden pojedyńczy obiekt i są bardzo podobne
18.2. w jaki sposób
18.2.1. composite pagttern
19. Extract Composite (195)
19.1. kiedy
19.1.1. jeśli każda podklasa hierarchii implementuje Composite
19.2. w jaki sposób
20. Form Template Method (188)
20.1. kiedy
20.1.1. do powtarzającego się kodu w procedurach, funkcja w podklasach pewnej hierarchii
20.2. w jaki sposób
21. Replace Conditional Dispacher with Command (177)
21.1. kiedy
21.1.1. rozbudowany switch
21.1.1.1. swich jest zły gdy jest sztywny i skomplikowany
21.1.2. jeżeli klasa realizuje zbyt wiele zachowań w odpowiedzi na bardzo zróżnicowane żądania
21.1.2.1. można dzięki temu kilkakrotnie zmniejszyć rozmiar takiej klasy
21.2. w jaki sposób
21.2.1. rozbijanie switcha na kolekcję obiektów command
22. Replace State-Altering Conditionals with State (154)
22.1. kiedy
22.1.1. jeśli bardzo złożone if-y decydują o zmianie stanu obiektu
22.1.2. kiedy typ prosty decyduje o zmianie stanu obiektu
22.1.3. kiedy duża klasa
22.2. w jaki sposób
22.2.1. wynikiem będą klasy reprezentujące poszczególne stany
22.2.2. zmienianie jej stanu poprzez wprowadzenie do rodziny klas State
23. Extract Method
23.1. kiedy
23.1.1. za długa metoda
23.2. w jaki sposób
23.2.1. znajdujemy fragmenty kodu które można pogrupować w metodę
24. Introduce Polymorphic Creation with Abstact Factory (88)
24.1. kiedy
24.1.1. jeśli metoda podobnie implementowana w podklasach,a wyznacznikiem jest sposób kreowania obiektu