Wzór Most jest po prostu zwrócić uwagę na kilka zbieżnych obowiązków i ich rozdzielenie. Użyję przykładu The Gang of Four (TGF), ponieważ uważam, że jest naprawdę dobry:
Masz interfejs Window, z dwiema podklasami: XWindow (oparty na X Window Manager) i PMWindow (oparty w programie IBM Presentation Manager (PM) Window Manager ... o którym nigdy nie słyszałem).
tj:
interface Window {}
class XWindow : Window {}
class PMWindow : Window {}
Problem z kontynuacją w naszym tradycyjnym podejściem spadkowego jest, że jeśli specjalizują Okno na aspekcie innego niż jego uzależnienia platformy (czyli masz pewną odpowiedzialność, która jest prostopadła do tej, którą utworzyłem drzewo dziedziczenia do obsługi), musisz użyć wzorca mostu, w przeciwnym razie hierarchia klas będzie rosła geometrycznie w głąb. Myślę, że to dobry sposób myślenia o moście jako połączeniu spadku i kompozycji.
To dość rozwlekłe. Wracając do przykładu TGF: co jeśli chcesz IconWindow i TransientWindow (coś jak szklana tafla). Koncepcja "Icon vs Transient" i "PM vs X" to dwie ortogonalne idee, ale obaj próbują dostać się do tego samego drzewa dziedziczenia. Jeśli nie korzystasz z wzoru most, co musisz zrobić, to stworzyć dwa nowe interfejsy, dziedziczenie z pierwszym i mnóstwo zajęć pod nimi:
interface Window {}
class XWindow : Window {}
class PMWindow : Window {}
interface IconWindow : Window {}
class XIconWindow : XWindow, IconWindow {}
class PMIconWindow : PMWindow, IconWindow {}
interface TransientWindow : Window {}
class XTransientWIndow : XWindow, TransientWindow {}
class PMTransientWindow : PMWindow, TransientWindow {}
wzorkiem mostu byś oddzielenia tych dwóch odpowiedzialność na dwa drzewa dziedziczenia:
interface Window {}
class IconWindow : Window {} //this class...
class TransientWindow : Window {} //and this one will keep a private reference to aWindowImp
interface WindowImp: Window {}
class XWindowImp : WindowImp {}
class PMWindowImp : WindowImp {}
Znacznie czystsza, znacznie lepsza segregacja odpowiedzialności i dużo łatwiejsza do napisania i konsumpcji!
I wierzę, że ten problem z projektowaniem i dziwności nawet drzewa obiektów mostowych były w rzeczywistości niektórymi problemami wpływającymi na konstrukcję miksów w Scali. Używając dziedziczenia wielokrotnego C++, statycznie łączysz wszystkie implementacje z ich systemem okienkowym. Innymi słowy, miałbyś taką samą liczbę typów jak wzór inny niż mostek, ale prawdopodobnie byłyby pustymi klasami i możesz oczywiście odwoływać się do nich przez abstrakcję, co czyni ją dość łatwą do konsumpcji.
to wygląda dłuższy fabryki wzór IMHO – DevZer0
można zobaczyć [wpisać opis link tutaj] [1] [1]: http://stackoverflow.com/questions/319728/when-do- ty-use-the-bridge-pattern –
@mjavadlatify Widziałem już ten link. Niestety to mi nie pomaga. –