Адаптер режим
Определение рисунка адаптера (английский: адаптерный рисунок) иногда называют стилем упаковки или упаковкой. Перенесите интерфейс класса в то, что ожидает пользователь. Адаптация делает классы, которые не могут работать вместе из -за несовместимости интерфейса.
Есть два типа режимов адаптера:
1. Режим адаптера объекта - адаптер объекта соответствует интерфейсу ожидания пользователя через ассоциацию, а также уменьшает плохую связь между кодами. Рекомендуется использовать «адаптация объекта» в вашей работе.
2. Режим адаптера класса - в этом режиме адаптера адаптер наследует его реализованные классы (обычно множественное наследство). В Java нет многочисленного наследства, поэтому я не буду представлять его здесь.
выполнить
1. Цель - определяет метод, который клиент должен использовать.
2. Адаптер - наследуйте или реализуйте цель и адаптируется к методам адаптации для цели.
3. Adaptee - Определите существующий метод.
4. Клиент - Методы вызова в Target.
Общедоступный класс {public void -specialRequest () {System.out.println («Привет, я из адаптируемой!»); }} public interface Target {public void request (); } открытый класс адаптер реализует Target {Adaptee Adaptee; public adapter () {Adaptee = new Adaptee (); } public void request () {Adaptee.specificrequest (); }} public Class Client {public static void main (string [] args) {target target = new adapter (); target.request (); }}Чтобы реализовать шаблон адаптера класса, нам нужен адаптер, чтобы унаследовать адаптируемый.
Применимые сценарии
1. Если вы хотите использовать старый класс, и его интерфейс не отвечает вашим потребностям, вы можете использовать класс адаптера в качестве класса посредничества.
2. Вы хотите создать класс общего назначения, который может назвать некоторые не связанные с этим интерфейсы классов для использования.
Мостовой режим
Мотивация Иногда абстрактная должна иметь разные реализации. Например, существует два способа сохранения данных, один из них является методом файла, а другой - метод базы данных. Обычная практика состоит в том, чтобы унаследовать класс, который сохраняет данные, а затем реализовать различные способы сохранения данных. Проблема состоит в том, что трудно изменить и расширить метод сохранения, и метод сохранения не может быть переключен во время выполнения.
Определение мостового узора является одним из самых сложных шаблонов в шаблоне проектирования программного обеспечения, который отделяет абстрактные части вещей от его частей реализации, чтобы все они могли меняться независимо.
Например, «круг» и «треугольник» классифицируются под абстрактной «формой», в то время как «кружок рисования» и «Треугольник рисования» классифицируются по категории «рисунок», которая осознает поведение, а затем «рисунок» называется «формой».
1. Аннотация - определить абстрактные методы.
2. AbstractImpl - Используйте интерфейс реализации для реализации абстрактных методов.
3. Реализатор - определяет интерфейсы для конкретного поведения в реализации.
4. ConceteImplementor1, ConceteImplementor2 - реализуйте интерфейс реализации.
/ ** "Реализатор"*/ интерфейс transwapi {public void drawCircle (double x, double y, double ladius); }/** "ConceteImplementor" 1/2*/Class Transwapi1 реализует trawnapi {public void draitcircle (Double x, double y, double radius) {System.out.printf ("api1.circle at %f: %f radius %f/n", x, y, radius); }}/** "ConceteImplementor" 2/2*/Class Brantuary2 реализует trawnapi {public void drawcircle (двойной x, двойной y, двойной радиус) {System.out.printf ("api2.circle at %f: %f radius %f/n", x, y, radius); }} / ** "Abstraction"* / Shape interface {public void draw (); // Низкоуровневая публичная пустота ResizeByperCentage (Double PCT); // Высокий уровень}/ ** "Уточненная абстракция"*/ class circleshape реализует Shape {private Double x, y, Radius; Частный рисунок рисунок; Публичный круговой кольцо (Double X, Double Y, Double Radius, Brawnapi BransueApi) {this.x = x; this.y = y; this.radius = радиус; this.drawingapi = transwapi; } // Низкоуровневый IE реализация специфическая публичная void Draw () {transwapi.drawcircle (x, y, radius); } // Высокоуровневый т.е. Abstract Special Public void ResizeByperCentage (Double PCT) {RADIUS *= PCT; }} / ** "client"* / class bridgepattern {public static void main (string [] args) {shape [] formes = new Shape [2]; Формы [0] = Новый круговой шейп (1, 2, 3, новый рисунок1 ()); Формы [1] = Новый круговой шейп (5, 7, 11, новый рисунок2 ()); для (форма формы: формы) {shape.resizebypercentage (2.5); Shape.draw (); }}} Пример
1. Сохраните данные, упомянутые в мотивации.
2. Резервная рамка графики. Аналогично реализации в вышеуказанном коде.
Применимые сценарии
1. Вы не хотите, чтобы абстракция и реализация имели фиксированные отношения, но вы надеетесь, что реализация может быть изменена во время выполнения.
2. Как абстрактные, так и детали реализации могут быть расширены независимо, не влияя друг на друга.