Следующий патерн, также относится к типу структурных, и называется — мост.
Смысл этого паттерна в том чтобы отделить абстракцию от реализации. В каком-то смысле он очень похож на адаптер, с той разницей что адаптер, «адаптирует» интерфейсы классов друг к другу, а мост, разделяет их, для того что бы сделать возможным изменение интерфейсов независимо от реализации.
Вот как выглядит он выглядит на диаграмме:
Этот патерн следует применять, например, когда нужно отвязать интерфейс от реализации во время выполнения. Мост повышает расширяемость, позволяя независимо расширять абстракции и реализации.
Пример реализации паттарна Мост на 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]