„Здравей, Амиго! Днес ще ти кажа Howво точно е „ адаптер “. Надявам се, че след като научиш тази тема, ще разбереш много по-добре входно/изходните потоци.“
Представете си, че вашата програма използва две рамки, написани от други програмисти/компании. И двете рамки са много добри и използват ООП принципи: абстракция, полиморфизъм, капсулиране. Заедно те почти напълно покриват това, което вашата програма трябва да направи. Остава ви проста задача. Трябва да предадете обекти, създадени от една рамка, към другата рамка. Но и двете рамки са напълно различни и "не знаят една за друга", т.е. нямат общи класове. Трябва по няHowъв начин да преобразувате обектите на една рамка в обекти на другата.
Тази задача може да бъде красиво решена чрез прилагане на техниката « адаптер » (модел за проектиране):
Java code | Описание |
---|---|
|
Това отразява модела на проектиране на адаптера.
Основната идея е, че класът MyClass преобразува (адаптира) единия интерфейс към другия. |
"Можете ли да ми дадете по-конкретен пример?"
„ОК. Да кажем, че всяка рамка има свой собствен уникален интерфейс „списък“. Те може да изглеждат по следния начин:“
Java code | Описание |
---|---|
|
Код от първата ( алфа ) рамка
AlphaList е един от интерфейсите, който позволява на codeа на рамката да взаимодейства с codeа, който използва рамката. |
|
AlphaList Manager AlphaListManager е клас в рамката. Неговият метод createList създаваобект AlphaList |
|
Код от втората ( бета ) рамка.
BetaList е един от интерфейсите, който позволява на codeа на рамката да взаимодейства с codeа, който използва рамката. BetaSaveManager е клас в рамката. Неговият метод saveList записва BetaList обект |
|
Клас «Адаптер», който преобразува от интерфейса AlphaList към интерфейса BetaList
Класът ListAdapter имплементира интерфейса BetaList от втората рамка. Когато някой извика тези методи, codeът на класа „пренасочва“ извикванията към променливата на списъка , която е AlphaList от първата рамка. Обект AlphaList се предава на конструктора ListAdapter Методът setSize работи съгласно следните правила: ако размерът на списъка трябва да се увеличи, добавете празни (нулеви) елементи. Ако размерът на списъка трябва да бъде намален, изтрийте елементите в края. |
|
Пример за това How може да се използва |
„Най-много ми хареса последният ти пример. Много кратък и разбираем.“
GO TO FULL VERSION