В предыдущем посте мы рассмотрели схему адаптера . В этом блоге мы будем использовать шаблон моста.
Как уже упоминалось в GOF, использование яркого паттерна заключается в том, чтобы «отделить абстракцию от его реализации, чтобы оба эти элемента могли варьироваться независимо».
Как это приводит к проблеме с программным обеспечением? Представьте, что вам нужно внедрить программное обеспечение для ракет.
У вас есть баллистические ракеты, крылатые ракеты, ракеты и т. Д. Хотя все они являются ракетами и могут взорваться, их механизмы сильно различаются от типа к типу.
Принимая во внимание вышесказанное, скорее всего, вы закончите со многими слоями абстракций.
Ракета и то, что она делает, сильно различаются. И это то, что является образцом моста. Там будет абстракция ракеты, и ее поведение в значительной степени будет отличаться, если обеспечить реализацию другого компонента, в нашем случае воспламенитель.
У нас есть один интерфейс ракеты, определяющий действия ракеты.
1
2
3
4
5
6
7
|
package com.gkatzioura.design.structural.bridge; public interface Missile { void explode(); } |
И еще один интерфейс, который определяет действия воспламенителя.
1
2
3
4
5
6
|
package com.gkatzioura.design.structural.bridge; public interface Igniter { void ignite(); } |
И мы будем иметь реализацию пирогенного воспламенителя
1
2
3
4
5
6
7
8
|
package com.gkatzioura.design.structural.bridge; public class PyrogenIgniter implements Igniter { public void ignite() { } } |
И последнее, но не менее важное: у нас будет реализация AirToAirMissile.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
package com.gkatzioura.design.structural.bridge; public class AirToAirMissile implements Missile { private Igniter igniter; public AirToAirMissile(Igniter igniter) { this .igniter = igniter; } public void explode() { //Actions relation to explosion igniter.ignite(); } } |
Так что мы будем внедрять ракету воздух-воздух.
1
|
AirToAirMissile airToAirMissile = new AirToAirMissile( new PyrogenIgniter()); |
Как вы понимаете, компоненты ракет различаются, и в зависимости от компонентов их функциональные возможности меняются.
Вы можете найти исходный код на github .
Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. См. Оригинальную статью здесь: Структурные Проектные Образцы: Образец Моста
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |