Jest to druga z pięciu książek cyklu poświęconego wzorcom projektowym. Dowiedziałem się o nich słuchając devtalk trio (podcast prowadzony przez Macieja Aniserowicza, Andrzeja Krzywdę i Sławomira Sobótkę ). Zapraszam  do krótkiej recenzji:

ZAWARTOŚĆ

Książka podzielona jest na 8 rozdziałów:

  1. Concurrent and Networked Objects
  2. Service Access and Configuration Patterns
  3. Event Handling Patterns
  4. Synchronization Patterns
  5. Concurrency Patterns
  6. Weaving the Patterns Together
  7. The Past, Present, and Future of Patterns
  8. Concluding Remarks

Znajdują się w nich następujące wzorce projektowe:

Wrapper Facade

Enkapsuluje funkcje i dane dostarczane przez istniejące nie zorientowane obiektowo API w bardziej zwięzły, nadający się do wielokrotnego użytku, łatwy w utrzymaniu, spójny zorientowany obiektowo interfejs.

Component Configurator

Wprowadzając ten wzorzec projektowy będziemy mogli przyłączać i odłączać implementacje komponentów w czasie pracy systemu bez konieczności jego rekompilacji. Component Configurator dodatkowo wspiera rekonfiguracje komponentów w inny proces bez konieczności wyłączania procesu lub jego restartu.

Interceptor

Umożliwia dodawanie usług do frameworka oraz uruchamianie ich automatycznie po wystąpieniu określonych zdarzeń.

Extension Interface

Umożliwia eksportowanie kilku interfejsów przez komponent w celu zapobiegania rozrastania się interfejsów i uszkodzenia kodu klienta, gdy programiści rozszerzają lub modyfikują funkcjonalność komponentu.

Reactor

Pozwala aplikacjom sterowanym zdarzeniami demultipleksować i wysyłać żądania serwisowe, które są dostarczane do aplikacji od jednego lub większej liczby klientów.

Proactor

Wzorzec architektoniczny Proactor pozwala aplikacjom sterowanym zdarzeniami efektywnie demultipleksować i wywoływać żądania serwisowe wyzwalane przez zakończenie operacji asynchronicznych, aby osiągnąć korzyści wydajnościowe współbieżności bez ponoszenia pewnych zobowiązań.

Asynchronous Completion Token

Wzorzec pozwala aplikacji na demultipleksację i efektywne przetwarzanie odpowiedzi asynchronicznych operacji wywoływanych w usługach.

Acceptor-Connector

Wzorzec ten oddziela połączenie i inicjowanie współpracujących usług równorzędnych w systemie sieciowym od przetwarzania wykonywanego przez usługi równorzędne po ich podłączeniu i inicjalizacji.

Scoped Locking

Idiom języka C++ , zapewnia, że blokada jest uzyskiwana, gdy kontrola wchodzi w zakres i jest automatycznie zwalniana, gdy kontrola opuszcza zasięg, niezależnie od ścieżki powrotnej z zakresu.

Strategized Locking

Wzorzec parametryzuje mechanizmy synchronizacji chroniące krytyczne sekcje komponentu przed współbieżnym dostępem.

Thread-Safe Interface

Minimalizuje obciążenie blokujące i zapewnia, że wywołania metod składowych nie powodują “self-deadlock”, próbując ponownie uzyskać blokadę, która jest już w posiadaniu składnika.

Double-Checked Locking Optimization

Zmniejsza obciążenie związane z rywalizacją i synchronizacją, gdy krytyczne sekcje kodu muszą zdobyć blokady w sposób bezpieczny dla wątków tylko raz podczas wykonywania programu.

Active Object

Oddziela wykonanie metody od wywołania metody, aby zwiększyć współbieżność i uprościć zsynchronizowany dostęp do obiektów znajdujących się w ich własnych wątkach sterowania.

Monitor Object

Synchronizuje równoczesne wykonywanie metody, aby zapewnić, że tylko jedna metoda na raz działa w obiekcie. Pozwala również metodom obiektu na wspólne planowanie harmonogramów ich wykonywania.

Half-Sync/Half-Async

Oddziela asynchroniczne i synchroniczne przetwarzanie usług w systemach współbieżnych, aby uprościć programowanie bez nadmiernego obniżania wydajności. Wzorzec wprowadza dwie wzajemnie komunikujące się warstwy: jedną dla asynchronicznego i drugą dla synchronicznego przetwarzania usług.

Leader/Followers

Zapewnia efektywny model współbieżności, w którym wiele wątków po kolei udostępnia zestaw źródeł zdarzeń w celu wykrywania, demultipleksowania, wysyłania i przetwarzania żądań usług, które występują w źródłach zdarzeń.

Thread-Specific Storage

Pozwala wielu wątkom używać jednego ” logically global” punktu dostępu do pobierania obiektu, który jest lokalny dla wątku, bez obciążania blokadą każdego dostępu do obiektu.

PODSUMOWANIE

W książce przedstawiono problemy związane z tworzeniem aplikacji współbieżnych i sieciowych. Powyższe wzorce pomagają w ich rozwiązaniu. Przykładowy kod napisany jest w C ++, Java oraz C. Bardzo podoba mi się struktura opisu wzorca projektowego. Zachowano identyczny styl jak w pierwszej części serii. Pozycja ta została wydana w 2000 roku więc ma już kilka lat na karku. Lecz wzorce projektowe szybko się nie starzeją i w większości są aktualne do dziś. Według mnie zostały one bardzo dobrze opisane i przedstawione. Na każdy wzorzec poświęcono około 30 stron opisu. Książka ma silny aspekt teoretyczny przez co nie każdemu może przypaść do gustu.

DLA KOGO JEST TA KSIĄŻKA?

Książka skierowana jest do doświadczonego czytelnika zaznajomionego z programowaniem obiektowym oraz z wzorcami. W recenzji przedstawiłem krótkie opisy wzorców zawartych w tej książce, może pomoże Ci to zdecydować czy warto sięgnąć po tą pozycję.

Zapraszam na inne recenzje: pisz-kod.pl/recenzje/

Informacje podstawowe:

Autorzy: Douglas C. Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann

Ilość stron: 450

Rok wydania: wrzesień 2000

Źródło okładki:  https://media.wiley.com/product_data/coverImage300/74/11187251/1118725174.jpg