ООП для чайников. Паттерны проектирования. Мост (bridge)

Следующий патерн, также относится к типу структурных, и называется — мост.
Смысл этого паттерна в том чтобы отделить абстракцию от реализации. В каком-то смысле он очень похож на адаптер, с той разницей что адаптер, «адаптирует» интерфейсы классов друг к другу, а мост, разделяет их, для того что бы сделать возможным изменение интерфейсов независимо от реализации.

Вот как выглядит он выглядит на диаграмме:

bridge

Этот патерн следует применять, например, когда нужно отвязать интерфейс от реализации во время выполнения. Мост повышает расширяемость, позволяя независимо расширять абстракции и реализации.

Пример реализации паттарна Мост на Python:

 
class SortAbstraction:    
 
    def sortImpl(self, sortImpl):
        self._sortImpl = sortImpl
 
    def sort(self, data):
        self._sortImpl.sort(data)
        return data 
 
class SortImpl:
 
    def sort(self, data):
        pass
 
class FastSortimpl(SortImpl):
 
    def sort(self, data):
        return data.sort()
 
class SlowSortImpl(SortImpl):
 
    def sort(self, data):
        return data.sort() # медленная сортировка
 
class FastSortImpl(SortImpl):
 
    def sort(self, data):
        return data.sort() # якобы быстрая сортировка
 
if __name__ == '__main__':    
    abstraction = SortAbstraction()
    abstraction.sortImpl(SlowSortImpl())
    print(abstraction.sort([2,1,3]))
 
    abstraction.sortImpl(FastSortImpl())
    print(abstraction.sort([2,1,3]))
 
-------------------------
[1, 2, 3]
[1, 2, 3]
 

Comments

comments


Bookmark and Share