Это схематическое описание «паттерна проектирования адаптер».
Суть его в том, что класс MyClass является преобразователем (адаптером) одного интерфейса к другому.
class MyClass implements Interface2 { private Interface1 object; MyClass(Interface1 object) { this.object = object; } // тут располагаются методы Interface2, // которые вызывают методы Interface1 }
Код из первого(Alpha) фреймворка.
AlphaList – это один из интерфейсов, для взаимодействия кода фреймворка и кода, который будет использовать этот фреймворк.
interface AlphaList { void add(int value); void insert(int index, int value); int get(int index); void set(int index, int value); int count(); void remove(int index); }
AlphaListManager – класс фреймворка, метод которого createList создает объект типа AlphaList
class AlphaListManager { public static AlphaList createList() { //какой-то код по созданию объекта } }
Код из второго(Beta) фреймворка.
BetaList – это один из интерфейсов, для взаимодействия кода фреймворка и кода, который будет использовать этот фреймворк.
BetaSaveManager – класс фреймворка, метод которого saveListсохраняет на диск объект типа BetaList
interface BetaList { int getValue(int index); void setValue(int index, int value); int getSize(); void setSize(int newSize); } class BetaSaveManager { public static void saveList(BetaList list) { //какой-то код по сохранению объекта //типа BetaList в файл на диске } }
Класс «адаптер» (т.е. переходник) от интерфейса AlphaList к интерфейсу BetaList
Класс ListAdapter реализует интерфейс BetaList из второго фреймворка.
Когда кто-то вызывает эти методы, код класса перевызывает методы переменной list, которая имеет тип AlphaList из первого фреймворка.
Объект типа AlphaList передается в конструктор ListAdapter в момент создания
Метод setSize работает по принципу: если нужно увеличить размер списка – добавим туда пустых (null) элементов. Если нужно уменьшить – удалим несколько последних.
class ListAdapter implements BetaList { private AlphaList list; ListAdapter(AlphaList list) { this.list = list; } int getValue(int index) { return this.list.get(index); } void setValue(int index, int value) { this.list.set(index, value); } int getSize() { return this.list.count(); } void setSize(int newSize) { if (newSize > this.list.count() { while (this.list.count() < newSize) { this.list.add(null); } } else if (newSize < this.list.count() { while (this.list.count() > newSize) { list.remove(list.count() - 1); } } } }
Пример использования:
public static void main(String[] args) { AlphaList listAlpha = AlphaListManager.createList(); BetaList listBeta = new ListAdapter(listAlpha); BetaSaveManager.saveList(listBeta); }
Leave A Comment