Статьи

Структурные Образцы Проекта: Образец Моста

В предыдущем посте мы рассмотрели схему адаптера . В этом блоге мы будем использовать шаблон моста.

Как уже упоминалось в 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, являются их собственными.