Модель адаптера
Режим (адаптер 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,наши демонстрационные классы , использующие классаудиоплеера, чтобы играть в различные форматы.
Шаг 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 не поддерживается