Skip to content

Шаблон мост: Паттерн проектирования «Мост» / «Bridge» / Хабр

Паттерн проектирования Мост

Паттерн Мост (Bridge) — это структурный паттерн проектирования, который позволяет нам отделить абстракции от реализаций и сделать их независимыми друг от друга. В результате абстракции и реализации могут разрабатываться как отдельные сущности. Паттерн Мост считается одним из лучших методов организации иерархии классов. Но давайте поподробнее разберем, что всё это значит.

Элементы паттерна Мост

  • Abstraction (абстракция). Это ядро ​​паттерна Мост. Она предоставляет ссылку на Implementer.
  • Refined Abstraction (расширенная абстракция) содержит различные вариации управляющей логики, наследуется от Abstraction и расширяет унаследованный интерфейс.
  • Implementer (реализатор). Определяет базовый интерфейс для конкретных реализаций. Этот интерфейс не обязательно должен напрямую соответствовать интерфейсу абстракции. Более того, он может сильно отличаться от него.
  • Concrete Implementation (конкретная реализация) наследуется от Implementer.

[python_ad_block]

Какую проблему решает паттерн Мост?

Давайте представим, что у нас есть класс Cuboid (параллелепипед), который имеет три атрибута: length (длина), breadth (ширина) и height (высота). Также он имеет три метода: ProducewithAPI(), ProduceWithAPI2() и expand().

Два метода зависят от реализации, поскольку у нас есть два API, а один метод — expand() — не зависит.

Пока у нас всего три метода, все в порядке. Но в масштабируемом проекте их количество может вырасти, и тогда разработчикам станет крайне сложно с ними справляться. Посмотрите, как быстро может разрастись такая структура:

 

Следующий код написан без использования паттерна Мост:

""" Code without using the bridge method
	We have a class with three attributes
	named as length, breadth, and height and
	three methods named as ProduceWithAPI1(),
	ProduceWithAPI2(), and expand().  Out of these
	producing methods are implementation-specific
	as we have two production APIs"""
class Cuboid:
	class ProducingAPI1:
		"""Implementation Specific Implementation"""
		def produceCuboid(self, length, breadth, height):
			print(f'API1 is producing Cuboid with length = {length}, '
				f' Breadth = {breadth} and Height = {height}')
	class ProducingAPI2:
		"""Implementation Specific Implementation"""
		def produceCuboid(self, length, breadth, height):
			print(f'API2 is producing Cuboid with length = {length}, '
				f' Breadth = {breadth} and Height = {height}')
	def __init__(self, length, breadth, height):
		"""Initialize the necessary attributes"""
		self._length = length
		self._breadth = breadth
		self._height = height
	def produceWithAPI1(self):
		"""Implementation specific Abstraction"""
		objectAPIone = self.ProducingAPI1()
		objectAPIone.produceCuboid(self._length, self._breadth, self._height)
	def producewithAPI2(self):
		"""Implementation specific Abstraction"""
		objectAPItwo = self. ProducingAPI2()
		objectAPItwo.produceCuboid(self._length, self._breadth, self._height)
	def expand(self, times):
		"""Implementation independent Abstraction"""
		self._length = self._length * times
		self._breadth = self._breadth * times
		self._height = self._height * times
# Instantiate a Cubiod
cuboid1 = Cuboid(1, 2, 3)
# Draw it using APIone
cuboid1.produceWithAPI1()
# Instantiate another Cuboid
cuboid2 = Cuboid(19, 20, 21)
# Draw it using APItwo
cuboid2.producewithAPI2()

Решение проблемы при помощи паттерна Мост

Теперь давайте посмотрим на решение вышеуказанной проблемы с использованием паттерна Мост. Данный паттерн является одним из лучших решений для такого рода проблем.

Наша основная задача — разделить код абстракции и реализации. В результате мы получим следующую структуру:

Следующий код написан с использованием паттерна Мост:

"""Code implemented with Bridge Method. 
We have a Cuboid class having three attributes
named as length, breadth, and height and three
methods named as produceWithAPIOne(), produceWithAPItwo(),
and expand(). Our purpose is to separate out implementation
specific abstraction from implementation-independent
abstraction"""
class ProducingAPI1:
	"""Implementation specific Abstraction"""
	def produceCuboid(self, length, breadth, height):
		print(f'API1 is producing Cuboid with length = {length}, '
			f' Breadth = {breadth} and Height = {height}')
class ProducingAPI2:
	"""Implementation specific Abstraction"""
	def produceCuboid(self, length, breadth, height):
		print(f'API2 is producing Cuboid with length = {length}, '
			f' Breadth = {breadth} and Height = {height}')
class Cuboid:
	def __init__(self, length, breadth, height, producingAPI):
		"""Initialize the necessary attributes
		Implementation independent Abstraction"""
		self._length = length
		self._breadth = breadth
		self._height = height
		self._producingAPI = producingAPI
	def produce(self):
		"""Implementation specific Abstraction"""
		self. _producingAPI.produceCuboid(self._length, self._breadth, self._height)
	def expand(self, times):
		"""Implementation independent Abstraction"""
		self._length = self._length * times
		self._breadth = self._breadth * times
		self._height = self._height * times
"""Instantiate a cuboid and pass to it an
object of ProducingAPIone"""
cuboid1 = Cuboid(1, 2, 3, ProducingAPI1())
cuboid1.produce()
cuboid2 = Cuboid(19, 19, 19, ProducingAPI2())
cuboid2.produce()

UML-диаграмма паттерна Мост

Вот так будет выглядеть UML-диаграмма паттерна Мост:

Преимущества применения паттерна Мост

  1. Принцип единой ответственности. Паттерн Мост четко следует принципу единой ответственности: он отделяет абстракцию от ее реализации, чтобы они могли видоизменяться независимо друг от друга.
  2. Принцип открытости/закрытости. Данный паттерн не нарушает принцип открытости/закрытости. Поскольку абстракция и реализация не зависят друг от друга, мы в любой момент можем ввести новые абстракции и реализации.
  3. Кроссплатформенность. Паттерн Мост можно легко использовать для реализации независимых от платформы функций и создания кроссплатформенных приложений.

Недостатки применения паттерна Мост

  1. Сложность. При использовании Моста наш код может усложниться, потому что мы вводим новые классы абстракций и реализаций.
  2. Снижение производительности. Применение Моста может немного ухудшить производительность.
  3. Интерфейсы только с одной реализацией. Если у нас ограниченное количество интерфейсов, то это не страшно. Но если у нас раздутый набор интерфейсов (абстракций) с минимальным количеством реализаций или вообще с одной реализацией, ими становится крайне трудно управлять.

Применение паттерна Мост

  • Динамическое связывание. Обычно паттерн Мост используется для обеспечения динамического связывания реализации. Это означает, что мы можем вызывать метод во время выполнения, а не во время компиляции.
  • Сопоставление классов. Данный паттерн также используется для сопоставления ортогональных иерархий классов.
  • UI-окружение. Мост используется при определении очертаний пользовательского интерфейса.

Заключение

Итак, мы познакомились с паттерном проектирования Мост (Bridge). Теперь вы знаете, какую проблему он решает и как применяется. Кроме того, мы разобрали преимущества и недостатки данного паттерна.

Надеемся, данная статья была вам полезна! Успехов в написании кода!

Перевод статьи «Bridge Method – Python Design Patterns».

Измеритель Bridge Cam




Измеритель Bridge Cam он же MG-8 предназначен для измерений вогнутости углового шва, выпуклости шва, катета углового шва, глубины подреза, смещения, глубины точечной коррозии, а также для использования в качестве линейки до 60 мм и измерения угла разделки кромок 0° — 60°. Измеритель Bridge Cam изготовлен из нержавеющей стали и состоит из базовой пластины с 3-мя шкалами, ползунка с 1-й шкалой и подвижного указателя с риской.

Калибровка шаблона проводится собственной метрологической службой по методике МК 01.2017. Данный шаблон соответствует требованиям ГОСТ Р 50.05.08-2018 и ГОСТ Р ИСО 17637-2014, имеет сертификацию в системе ГОСТ Р Росстандарта РФ. Инструкция по использованию шаблона сварщика Bridge Cam приведена на схемах слева. Данный шаблон можно купить отдельно либо в составе набора из 16 позиций. Комплект поставки: шаблон Bridge Cam, чехол, паспорт, сертификат о калибровке (по заявке). Измеряемые диапазоны и технические параметры измерителя приведены в следующей таблице:








ФункцияДиапазонРазрешениеПогрешность
Использование как линейки0-60 мм1 мм±0,2 мм
Использование несоосности поверхностей, смещения, выпуклости шва0-25 мм1 мм±0,2 мм
Измерение угла кромки0-60°±1°
Измерение вогнутости шва0-20 мм1 мм±0,2 мм
Измерение катета углового шва0-25 мм1 мм±0,2 мм
Измерение глубины подреза0-20 мм1 мм±0,2 мм

Видео Измеритель Bridge Cam


Функции, диапазоны измерения и погрешности шаблонов сварщика российского и зарубежного производства























Контролируемый параметрУШС-2УШС-3УШС-4WG-01WG-1WG-2BRIDGE CAMHI-LOSINGLE HI-LOV WACTapiRusAWS WELD GAUGESKEW-T WELD GAGEУшерова- МаршакаКатетомер КМС 3-16Красовского УШК-1
Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.Диап.Погр.
Угол разделки кромки  0-45°±2,5°0-45°±2,5°90- 155°±30’90- 150°±2,5°80- 160°±2,5°0-60°±2,5°37.5°±2,5°    8-40°           
Измерение толщины стенки труб и заготовок              0-45 мм±0,2 мм    0-55 мм±0,1 мм          
Измерение внутренней несоостности              0-30 мм±0,2 мм0-40 мм±0,2 мм              
Смещение кромок  0-15 мм±0,5 мм0-15 мм±0,5 мм0-15 мм± 0,2 мм0-13 мм±0,2 мм0-15 мм±0,2 мм0-25 мм±0,2 мм    0-6 мм±0,2 мм0-20 мм±0,1 мм          
Размер зазоров  1-4 мм±0,25 мм1-4 мм±0,25 мм0-3,5 мм±0,2 мм1-5 мм±0,1 мм1-5 мм±0,1 мм    0-40 мм±0,2 мм    0-4 мм±0,1 мм        
Измерение угла вертикальной заготовки                    24-128°   30- 90°±2,5°      
Высота усиления стыкового шва  0-5 мм±0,5 мм0-5 мм±0,5 мм0-15 мм± 0,2 мм0-12 мм±0,1 мм0-15 мм±0,1 мм0-25 мм±0,2 мм0-30 мм±0,2 мм  0-6 мм±0,2 мм0-10 мм±0,1 мм0-3 мм±0,2 мм  0-10 мм±0,1 мм  0-5 см±0,5 мм
Высота углового шва    0-10 мм±0,5 мм0-11 мм±0,2 мм0-15 мм±0,5 мм0-15 мм±0,5 мм0-20 мм±0,2 мм      0-22 мм±0,5 мм    0-20 мм±0,1 мм  0-15 см±0,5 мм
Высота катета углового шва      0-20 мм± 0,3 мм    0-25 мм±0,2 мм0-30 мм±0,2 мм    0-23 мм±0,1 мм0-20 мм±0,2 мм        
Измерение высоты катета углового шва > или ˂ 90°                        0-50 мм±0,2 мм      
Расчет нормативной высоты катета углового шва > или ˂ 90°                        Комплект с линейкой сварщика      
Радиус катетов4-14 мм±0,04 мм                  6-8 мм           
Размер катетов                    0-23 мм±0,01 мм      3-12 мм±0,3 мм  
Притупление и ширина кромки шва0-50 мм±0,5 мм0-50 мм±0,15 мм0-50 мм±0,5 мм0-40 мм±0,2 мм0-40 мм±0,2 мм0-50 мм±0,2 мм0-60 мм±0,2 мм    0-20 мм±0,2 мм0-25 мм
0-20 мм
±0,5 мм
±0,1 мм
          
Подрезы, западания, глубина вогнутости  0-15 мм±0,5 мм0-15 мм±0,5 мм  0-7 мм±0,1 мм0-8 мм±0,1 мм0-4 мм±0,2 мм    0-6 мм±0,2 мм0-20 мм±0,1 мм    0-10 мм±0,1 мм    
Высота корневого слоя                    Расчет на сайте          
Высота выпуклости (при сварке разнотолщинных элементов)                              
Увод кромок                              
Диаметр, овальность                    от 133 мм          
Плавность перехода                    110°, 120°, 150°          

Купить шаблоны сварщика УШС-2, УШС-3, УШС-4, ШПС-1, WG1, WG2, Красовского, Ушерова-Маршака можно по цене указанной в прайс-листе. Цена шаблонов сварщика указана с учетом НДС. Смотрите также разделы: Услуги по визуальному контролю сварных швов, Поверка измерительного инструмента, Наборы для визуального контроля, Фотоальбомы дефектов по ВИК, Аттестация специалистов по ВИК, Набор шаблонов сварщика.

 

 

Измеритель Bridge Cam в наличии на складе. Заказать доставку шаблонов можно до двери либо до терминалов транспортной компании в городах: Москва, Санкт-Петербург, Екатеринбург, Саратов. Амурск, Ангарск, Архангельск, Астрахань, Барнаул, Белгород, Бийск, Брянск, Воронеж, Великий Новгород, Владивосток, Владикавказ, Владимир, Волгоград, Волгодонск, Вологда, Иваново, Ижевск, Йошкар-Ола, Казань, Калининград, Калуга, Кемерово, Киров, Кострома, Краснодар, Красноярск, Курск, Липецк, Магадан, Магнитогорск, Мурманск, Муром, Набережные Челны, Нальчик, Новокузнецк, Нарьян-Мар, Новороссийск, Новосибирск, Нефтекамск, Нефтеюганск, Новочеркасск, Нижнекамск, Норильск, Нижний Новгород, Обнинск, Омск, Орёл, Оренбург, Оха, Пенза, Пермь, Петрозаводск, Петропавловск-Камчатский, Псков, Ржев, Ростов, Рязань, Самара, Саранск, Смоленск, Сочи, Сыктывкар, Таганрог, Тамбов, Тверь, Тобольск, Тольятти, Томск, Тула, Тюмень, Ульяновск, Уфа, Ханты-Мансийск, Чебоксары, Челябинск, Череповец, Элиста, Ярославль и другие города. А так же Республики Казахстан, Белоруссия и другие страны СНГ.

Лидеры продаж ВИК

Фотоальбом дефектов основного металла

Альбом радиографических снимков

Документы

ОПРОС:

Какое оборудование кроме НК вас интересует:

Геодезическое

Тех. диагностика

Строительное

Другое

Мост