Latest web development tutorials

Модель адаптера

Режим (адаптер Pattern) в качестве моста между двумя несовместимыми интерфейсами. Этот тип шаблонов проектирования принадлежат структурной модели, которая сочетает в себе функции двух отдельных интерфейсов.

Эта модель включает в себя единственный класс, который отвечает за независимые или присоединиться к несовместимых функций интерфейса. Например реальной жизни, как устройство чтения карт памяти адаптер и ноутбук между ними. Ваша карта памяти в считывающее устройство, то читатель в ноутбук, так что карта памяти может быть прочитан через ноутбук.

Демонстрируется использование режима адаптера с помощью следующих примеров. В котором устройство аудиоплеер может воспроизводить только файлы MP3 для воспроизведения VLC и MP4 файлы, используя более продвинутый аудиоплеер.

введение

Цель: преобразовать интерфейс класса в другой интерфейс клиенты ожидают.Шаблон адаптера делает эти классы в противном случае из-за несовместимых интерфейсов не могут работать вместе, чтобы работать вместе.

Главным образом , чтобы решить:главное решение в системе программного обеспечения, часто некоторые из "существующего объекта" в новую среду, новые экологические требования и интерфейс теперь объект не может быть выполнено.

Когда использовать: 1, система требует использования существующего класса, и такие интерфейсы не отвечают потребностям системы.2, необходимо создать класс может быть повторно использована для, в том числе некоторые из них могут работать с некоторыми из классов не сильно связаны друг с другом в будущем введения класса, эти классы не обязательно имеют один и тот же интерфейс источника. 3, через преобразователь интерфейса, класса в другой класс линий. (Такие, как тигры и птицы, в настоящее время более, чем тигр, без увеличения спроса на объекты под дополнительным адаптером, в котором тигр инклюзивные объектов, реализующих интерфейс летать.)

Как исправить: Наследуемый или зависимость (рекомендуется).

Код ключа: наследование адаптера или зависимые объекты , которые уже существуют для достижения желаемого целевого интерфейса.

Примеры применения: 1, Соединенные Штаты Электрический 110В, Китай 220В, должен быть 110V адаптер в 220V.2, JAVA JDK 1.1 обеспечивает интерфейс Перечень и обеспечивает интерфейс итератора в 1.2, вы хотите использовать 1.2 JDK, до того, как система должна быть преобразована к перечислению интерфейс интерфейс Iterator, то вам нужен шаблон адаптера. 3, запустить программу на WINDOWS LINUX. 4, JAVA в JDBC.

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

Недостатки: 1, чрезмерное использование адаптера, что делает систему очень неаккуратно и трудно понять целое.Например, вызов отчетливо виден интерфейс, на самом деле, быть адаптирована для достижения B внутренний интерфейс стал системой, если это происходит слишком много, это равносильно катастрофе. Так что, если это не нужно, вы не можете использовать адаптер, но непосредственно к системе реконструированной. 2. По состоянию на большинстве JAVA наследовать класс, так что в лучшем случае адаптации адаптации классом, и должны быть направлены на класс является абстрактным классом.

Сценарии использования: Там являетсямотивация для изменения интерфейса нормальной работы системы, то вам следует рассмотреть возможность использования режима адаптера.

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

реализация

У нас есть интерфейсMediaPlayer,а также реализацию интерфейсаAudioPlayerMediaPlayer класса сущностей. Поумолчанию,AudioPlayer может воспроизводить mp3 формат звуковых файлов.

У нас также есть еще один интерфейсAdvancedMediaPlayerи реализованы классы сущностейAdvancedMediaPlayerинтерфейса. Этот класс может воспроизвести файл VLC и MP4.

Мы хотим сделатьAudioPlayerвоспроизводить аудио файлы в другие форматы. Для достижения этой цели нам нужно создать класс адаптера реализует интерфейсMediaAdapterMediaPlayer и использовать объектAdvancedMediaPlayerдля воспроизведения нужного формата.

AudioPlayerиспользования класса адаптераMediaAdapterпередать нужный тип звука, не нужно знать формат фактического класса может воспроизводить аудио потребности.AdapterPatternDemo,наши демонстрационные классы , использующие классаудиоплеера, чтобы играть в различные форматы.

Шаблон адаптера UML диаграмма

Шаг 1

Игроки и более продвинутые медиа-плеер для создания интерфейса для средств массовой информации.

MediaPlayer.java

Открытый интерфейс MediaPlayer {
   общественного недействительными игра (String audioType, String Filename);
}

AdvancedMediaPlayer.java

Открытый интерфейс AdvancedMediaPlayer {	
   общественного недействительными playVlc (String Filename);
   общественного недействительными playMp4 (String Filename);
}

Шаг 2

Создание классов сущностей реализованные интерфейсAdvancedMediaPlayer.

VlcPlayer.java

Открытый класс VlcPlayer реализует AdvancedMediaPlayer {
   @Override
   общественного недействительными playVlc (String Filename) {
      System.out.println ( "Игра Vlc Имя исполняемого файла :." + FileName);		
   }

   @Override
   общественного недействительными playMp4 (String Filename) {
      // Ничего не делать}
}

Mp4Player.java

Открытый класс MP4player реализует AdvancedMediaPlayer {

   @Override
   общественного недействительными playVlc (String Filename) {
      // Ничего не делать}

   @Override
   общественного недействительными playMp4 (String Filename) {
      System.out.println ( "Воспроизведение mp4 файл Имя :." + FileName);		
   }
}

Шаг 3

Создать классMediaPlayerреализует интерфейсный адаптер.

MediaAdapter.java

Открытый класс MediaAdapter реализует MediaPlayer {

   AdvancedMediaPlayer advancedMusicPlayer;

   общественного MediaAdapter (String audioType) {
      если (audioType.equalsIgnoreCase ( "VLC")) {
         advancedMusicPlayer = новый VlcPlayer ();			
      } Иначе, если (audioType.equalsIgnoreCase ( "mp4")) {
         advancedMusicPlayer = новый MP4player ();
      }	
   }

   @Override
   общественного недействительными игра (String audioType, String Filename) {
      если (audioType.equalsIgnoreCase ( "VLC")) {
         advancedMusicPlayer.playVlc (Filename);
      } Иначе, если (audioType.equalsIgnoreCase ( "mp4")) {
         advancedMusicPlayer.playMp4 (Filename);
      }
   }
}

Шаг 4

Создание классов сущностей реализованные интерфейсMediaPlayer.

AudioPlayer.java

Открытый класс AudioPlayer реализует MediaPlayer {
   MediaAdapter mediaAdapter; 

   @Override
   общественного недействительными игра (String audioType, String Filename) {		

      // Воспроизведение музыкальных файлов mp3, встроенную поддержку, если (audioType.equalsIgnoreCase ( "mp3")) {
         System.out.println ( "Воспроизведение mp3 файл Имя :." + FileName);			
      } 
      // MediaAdapter предоставляет играть в другие форматы файлов, поддерживаемые еще если (audioType.equalsIgnoreCase ( "VLC") 
         || AudioType.equalsIgnoreCase ( "mp4")) {
         mediaAdapter = новый MediaAdapter (audioType);
         mediaAdapter.play (audioType, Filename);
      }
      еще {
         System.out.println ( "Недействительные СМИ." +
            audioType + "формат не поддерживается");
      }
   }   
}

Шаг 5

AudioPlayer использовать для воспроизведения различных типов аудио форматов.

AdapterPatternDemo.java

Открытый класс AdapterPatternDemo {
   государственной статической силы основных (String []) {агдз
      AudioPlayer аудиоплеера = новый AudioPlayer ();

      audioPlayer.play ( "mp3", "за horizon.mp3");
      audioPlayer.play ( "mp4", "alone.mp4");
      audioPlayer.play ( "VLC", "далеко-away.vlc");
      audioPlayer.play ( "АВИ", "ум me.avi");
   }
}

Шаг 6

Проверьте выход.

Воспроизведение mp3 файлов Имя :. За horizon.mp3
Играя mp4 Имя исполняемого файла :. Alone.mp4
Игра Vlc Название файла :. Far Far away.vlc
Недействительные СМИ. Формат Avi не поддерживается