2011-10-09 34 views
10

Właśnie nauczyłem się wzoru Bridge i jego intencji: Odłączyć abstrakcję od jej realizacji, tak aby dwie mogły się różnić niezależnie.AbstractFactory Versus Bridge Pattern

Ale dlaczego nie tylko AbstractFactory zrobić to samo?

Wiem, że AbstractFactory może utworzyć konkretny most, ale moje pytanie dotyczy użycia AbstractFactory zamiast Bridge do oddzielenia abstrakcji i implementacji.

Czy możesz wyjaśnić mi różnicę między wzorami AbstractFactory i Bridge?

Odpowiedz

4

Po pierwsze wzór mostu z tego, co przeczytałem, bardziej dotyczy sytuacji, gdy zarówno zajęcia, jak i to, co robią, często się zmieniają. Samą klasę można uznać za implementację i zachowanie klasy jako abstrakcję.

Z drugiej strony Zasadnicza fabryka zapewnia interfejs do tworzenia grup powiązanych lub zależnych obiektów bez określania ich konkretnych klas; ich obawy dotyczące wdrożenia.

Podsumowując, porównujecie jabłka do pomarańczy i może właśnie stąd dochodzi do zamieszania. Są one przeznaczone do rozwiązywania różnych problemów.

Dla mnie operacje oznaczają metody w języku Java, więc operacje są definiowane lub deklarowane przez abstrakcję, ale są implementowane w samej klasie. Więc tak, abstrakcja jest po prostu deklaracją, co operacje mogą wykonać, jeśli chodzi o zachowanie, ale rzeczywiste implementacje są wykonywane w klasie. Również fabryka abstrakcyjna jest również poprawna.

Domyślam się, że elementem definiującym most jest to, że może on mieć zestawy abstrakcji różniące się od jednej abstrakcji.

Wzorce projektowe używają słowa abstrakcja w odniesieniu do klasy, która opiera się na zestawie operacji abstrakcyjnych, w których możliwe jest kilka implementacji zestawu operacji abstrakcyjnych.

zobacz te linki, aby uzyskać więcej informacji:

Using Abstractions and the Bridge Pattern in Java

Wikipedia: Bridge_Pattern

Bridge Pattern in Java

The Bridge Pattern Design Pattern

+1

Dziękuję za wyjaśnienie. Po prostu powiedz mi, że mam rację: w programie Bridge wszystkie prymitywne operacje powinny zostać zaimplementowane przez implementatorów, a nie przez samą abstrakcję.Z drugiej strony, z AbstractFactory, jego intencją jest tylko tworzenie obiektów (na przykład obiektów zawierających po stronie Abstrakcji Wzorca Mostu), ale ten wzorzec nigdy nie oczekuje, że wszystkie prymitywne operacje muszą zostać zaimplementowane po stronie Abstrakcji. Tak więc nie oczekuje się użycia zawsze delegacja taka jak objectCreatedByFactory.doSomething() dla wszystkich operacji pierwotnych – Mik378

1

Tak. Oni są podobni. AF służy do tworzenia rodzin obiektów. Gdzie jako Bridge chodzi bardziej o zachowanie, a także pozwala na luźne połączenie między algorytmem a platformą.

np .: Załóżmy, że tworzymy program do diagnostyki sieci za pomocą Ping i Traceroute, polecenia na różnych platformach są różne. Można użyć abstrakcyjnej fabryki, aby uzyskać instancję ping lub traceroute dla dowolnej platformy. To się nie kończy. Bridge pozwala nam opracować algorytm wyższego poziomu za pomocą poleceń ping i trace zwróconych przez AF. Algorytm, który może wykorzystywać inną sekwencję poleceń ping i traceroute, w zależności od platformy, może zostać wyodrębniony z szczegółów implementacji specyficznych dla platformy za pomocą wzorca mostu.

1

Istnieje kilka różnic i nie możemy porównać obu z nich.

  1. Abstract Factory jest kreacyjnych wzornictwo, która zajmuje się tworzeniem obiektów. Most to wzór konstrukcji strukturalnej, który zajmuje się strukturą i składem klas.

  2. W Bridge, abstrakcja i implementacja będą się różnić niezależnie. Ale w abstrakcyjnej fabryce, jeśli zmienisz abstrakcję (interfejs), musisz zmienić klienta.

abstract_factory wzór przypadek użycia:

  1. Gdy system musi utworzyć wiele rodzin produktów lub chcesz zapewnić bibliotekę produktów bez ujawniania szczegółów implementacji.

kontrolna:

  1. Zdecyduj, czy „niezależność od platformy”, a realizacja usługi są obecne źródło bólu.
  2. Mapuj macierz "platform" a "produktów".
  3. Należy zdefiniować interfejs fabryczny, który składa się z metody fabrycznej dla każdego produktu.
  4. Definiowanie klasy pochodnej fabryki dla każdej platformy, która zawiera wszystkie odwołania do nowego operatora.
  5. Klient powinien wycofać wszystkie odwołania do nowych i użyć metod fabrycznych do utworzenia obiektów produktu.

bridge wzór:

Użyj go, gdy:

  1. chcesz uruchomić w czasie wiązania realizacji,
  2. masz proliferacji klas ze sprzężonym interfejs i licznych wdrożeń,
  3. chcesz udostępnić implementację wśród wielu obiektów,
  4. musisz mieć p ortogonalne hierarchie klas.

Powiązane SE pytania:

Does the Bridge Pattern decouples an abstraction from implementation?

What is the basic difference between the Factory and Abstract Factory Patterns?

Zapraszamy do obejrzenia tej journaldev artykułu oraz sourcemaking artykuł na dogłębne zrozumienie różnych wzorców projektowych.