Режим моста
Мост (Bridge) используется для достижения развязкой и абстракции, так что эти два могут изменяться независимо друг от друга. Этот тип шаблонов проектирования принадлежат структурной модели, обеспечивая абстракции структурированной и преодоление между ними для достижения развязку.
Эта модель включает в себя в качестве интерфейса мостика, что позволяет компании не зависит от типа класса функции интерфейса. Эти два типа классов могут быть структурированы, чтобы изменить и влияют друг на друга.
Мы следующими примерами для демонстрации использования режима моста (мост шаблон). Что вы можете использовать один и тот же метод, но разные абстрактные классы мостовые класс реализации рисовать круги разных цветов.
введение
Намерение: абстракция и реализация части разделения, так что они могут изменяться независимо друг от друга.
Главное Решение: В различных обстоятельствах могут меняться, наследование классов может привести к взрыву, это не является гибким расширение.
Когда использовать: Внедрение системы классификации может иметь несколько углов, каждый угол может измениться.
Как исправить: поставить это многоугольных классификации разделены, так что они не зависят от изменений, уменьшить связь между ними.
Код ключа: реализация абстрактного класса зависит от класса.
Примеры применения: 1, возрождается из свиньи свиньи маршала полога реинкарнацию, перевоплощение земного механизма делится на два уровня, а именно: души и тела, бывших соответствует абстракции, что эквивалентно реализуемы.Существа, делегируя функции, вызова функции физических объектов, такие существа могут быть динамически выбраны. 2, выключатель на стене, вы можете увидеть переключатель является абстрактным, а не бетонная труба внутри, как достичь.
Преимущества: 1, аннотация и достижения разделения.2, отличная масштабируемость. 3, детали реализации прозрачным для клиента.
Недостатки: введение режима моста увеличит трудности понимания и дизайна системы, отношения полимеризации , построенной на уровне абстракции, требуя от разработчика для абстрактного дизайна и программирования.
Сценарии использования: 1, если система необходима между абстракцией и конкретной роли члена роли , чтобы добавить больше гибкости , чтобы избежать создания статического наследования связи между этими двумя уровнями, через режим моста таким образом , чтобы они слой абстракции установить отношения.2, для тех, кто не хочет использовать систему в порядке наследования многоуровневой или наследования привело к резкому увеличению числа системных классов, режим моста особенно применим. 3, класс есть два независимых измерения изменения, и эти два аспекта должны быть расширены.
Примечание: Для изменения двух независимых измерений, используя режим моста легко сделать.
реализация
Мы имеем в качествеDrawAPIинтерфейса моста и реализуемогоDrawAPIкласса интерфейсный объектRedCircle,GreenCircle.Формаявляется абстрактным классом, объектом использованияDrawAPI.BridgePatternDemo, наши демонстрационные классы используют классShape, чтобы рисовать круги разных цветов.
Шаг 1
Создать мост, который реализует интерфейс.
DrawAPI.java
Открытый интерфейс DrawAPI { общественного недействительными DrawCircle (радиус INT, INT х, Int у); }
Шаг 2
Создать объект реализации мостовую реализациюDrawAPIкласса интерфейса.
RedCircle.java
Открытый класс RedCircle реализует DrawAPI { @Override общественного недействительными DrawCircle (радиус INT, INT х, Int у) { System.out.println ( "Рисунок Круг [цвет: красный, радиус:" + Радиус + ", х:" + х + "," + у + "]"); } }
GreenCircle.java
Открытый класс GreenCircle реализует DrawAPI { @Override общественного недействительными DrawCircle (радиус INT, INT х, Int у) { System.out.println ( "Рисунок Круг [цвет: зеленый, радиус:" + Радиус + ", х:" + х + "," + у + "]"); } }
Шаг 3
DrawAPIиспользовать интерфейс для создания абстрактного классаShape.
Shape.java
общественного абстрактного класса Shape { защищенный DrawAPI drawAPI; Форма защищенной (DrawAPI drawAPI) { this.drawAPI = drawAPI; } общественности абстрактной юридической силы ничья (); }
Шаг 4
Создать класс сущностей реализует интерфейсShape.
Circle.java
Открытый класс Circle расширяет Shape { частное INT х, у, радиус; общественный круг (INT х, у INT, радиус INT, DrawAPI drawAPI) { супер (drawAPI); this.x = х; this.y = у; this.radius = радиус; } общественного недействительными ничья () { drawAPI.drawCircle (радиус, х, у); } }
Шаг 5
Использование классаShapeиDrawAPIрисовать круги разных цветов.
BridgePatternDemo.java
Открытый класс BridgePatternDemo { государственной статической силы основных (String []) {агдз Форма redCircle = новый круг (100100, 10, новый RedCircle ()); Форма GreenCircle = новый круг (100100, 10, новый GreenCircle ()); redCircle.draw (); greenCircle.draw (); } }
Шаг 6
Проверьте выход.
Рисунок Круг [цвет: красный, радиус: 10, х: 100, 100] Рисунок Круг [цвет: зеленый, радиус: 10, X: 100, 100]