Moim ulubionym jest cykl „Patterns in C” Adama Tornhilla :
Poza tym: zawsze myślę o goto
wielkim narzędziu dla biednych dla wzoru dekoratora.
Aktualizacja : Zdecydowanie polecam używanie Rusta ( rust-lang.org ) zamiast C, z wyjątkiem przypadków, gdy wymagane jest użycie c. Rust ma wszystkie zalety c, w tym szybkość i zgodność bibliotek binarnych z c, ale kompilator obsługuje większość złożoności, aby zapewnić, że kod jest bezpieczny w pamięci i nie zawiera wyścigów danych. Jest również przenośny, ma standardową bibliotekę do typowych zadań i jest znacznie łatwiejszy w programowaniu dla różnych wzorców projektowych.
goto
ma wspólnego z dekoratorami?Wzorce projektowe mogą być postrzegane jako brakujące funkcje językowe. Stan „Wprowadzenie wzorców projektowych: elementy oprogramowania obiektowego wielokrotnego użytku” :
Zdanie napisane kursywą to odpowiedź na twoje pytanie.
źródło
Polimorfizm poprzez wywołania zwrotne, np
qsort
. Funkcja biblioteki standardowej . Wszystko, czego potrzebuje, to sposób na porównanie dwóch elementów i posortowanie ich tablicy.Możesz być o wiele bardziej wyrafinowany, używając zestawów funkcji (vtables) do reprezentowania odpowiednich właściwości typu, tak aby ogólna procedura mogła go użytecznie przetworzyć. Na przykład odczyt, zapis itp. Wywołuje otwarty plik lub port sieciowy.
źródło
Tak, są. Leniwa inicjalizacja, singleton, pula obiektów, stan obiektu itp. Są łatwo zaimplementowane w czystym C.
Przykład (leniwa inicjalizacja)
#include <stdio.h> struct foo { int payload; }; int calculate_payload() { printf("%s\n", "Performing lengthy initialization..."); return 42; } struct foo *get_default_foo() { static int foo_calculated = 0; static struct foo default_foo; if (!foo_calculated) /* assuming single-threaded access */ { foo_calculated = 1; default_foo.payload = calculate_payload(); } return &default_foo; } int main() { struct foo *foo1, *foo2; printf("%s\n", "Starting the program"); foo1 = get_default_foo(); printf("%d\n", foo1->payload); foo2 = get_default_foo(); printf("%d\n", foo2->payload); return 0; }
źródło
Z czubka głowy
źródło
Wzorce projektowe często modelują rzeczy, które są tylko o jeden poziom od tego, co oferuje istniejące środowisko. Jeśli weźmiesz C ze standardową biblioteką jako środowisko, wyróżniającym się wzorcem projektowym jest Object Orientation.
źródło
Wirtualny system plików to doskonały przykład do nauki wzorca projektowego.
źródło