Адаптер модел в Ява

Връщаме се структурни модели за проектиране. Този път ще разгледаме един модел дизайн, наречен адаптер (наричан също обвивка заедно с модел Фасада).

В тази статия ще говорим за следното:

Така че, моделът на адаптер се използва за обекти с един общ интерфейс (договор) може да работи навсякъде, където има нужда от обект с напълно различен интерфейс. Има два вида на адаптер - Class адаптер и адаптер Object.

На първо място, ние гледаме на всеки един от тези видове, и тогава аз ще ви обясни разликата между две wrapper'ami - адаптер и фасадата.

адаптер Object

Адаптер Object достигне целта си със състав. В диаграмата по-долу, клиентът е длъжен да използва TargetInterface интерфейс. Това създава ObjectAdapter клас, който реализира TargetInterface интерфейс, и съхранява клас обект Adaptee. Когато се обадите метод targetMethod адаптера, призовава най-подходящия метод в адаптивна интерфейс.

В най-простия случай, ObjectAdapter на изпълнение ще бъде:

Плюс това, този подход е, че ние сме напълно отделни клиентския интерфейс на адаптивни интерфейс.

клас адаптер

В случай на клас Adapter'om да постигнем нашата цел за използване на множествено наследяване. Нашата ClassAdapter наследена от клиентския интерфейс и от адаптивността на интерфейса. Тъй като Java не е множествено наследяване, това е само един от предците може да бъде абстрактна / бетон клас. Вторият ще бъде предшественик на интерфейса, което не винаги е удобно.

И тук е тривиална изпълнение ClassAdapter клас:

Искам да ви обърна внимание, че техниките на конфликта sigratur могат да възникнат при такъв адаптер изпълнение. Такива проблеми имат не адаптер Object.

Клас адаптер се смята за едно просто решение в случая, когато не е необходимо строго разделение на клиент и адаптивни интерфейси.

Разликата между адаптер и фасадни

Сега искам да кажа няколко думи за модела на фасадата, която като адаптерът е Wrapper'om. Фасада определя нов интерфейс, а адаптерът използва съществуващите интерфейси.

Не е необходимо да се сравни фасада и адаптер да казва, Фасадни да наслагвате няколко класове, но само един адаптер адаптира. Може да се окаже, че адаптерът ще трябва да се адаптира броя на паралелките и обратно, трябва да използвате фасадата да се опрости само един комплекс клас. Така разликата между тези два модела, а не на броя на юридическите лица за ликвидация, а по-скоро за това, което правят.

Един пример за използване на адаптери в JDK

Стандартната библиотека също да намерите примери за използване на адаптер. Може би най-популярната му употреба - това java.io.InputStreamReader и OutputStreamWriter.

InputStreamReader конструктор поема вход InputStream и се адаптира в резултат на притока на читателя.