Проблема. Имеется готовый пакет с реализацией "особой" структуры данных с набором собственных методов и приватных полей. необходимо на его основе создать программу демонстрирующую работу с такой структурой данных.
Варианты структур данных для адаптации в приложение
1 Упорядоченный массив OrdArray
2 Стек Stack
3 Очередь queue
4 Приоритетная очередь priorityQ
5 Простой связанный список linklist
6 Двухсторонний список firstLastList
Требуется создать простой и понятный интерфейс работы с этой структурой. (Реализацию структуры менять нельзя, следовательно, нужен класс-адаптер, обеспечивающий доступ к функциям пакета, через набор "стандартных" методов - операций со структурами данных - вставка (insert), удаление (remote), поиск элемента по заданному ключу ( find).
Разработайте пользовательский интерфейс по аналогии с представленным рабочим окном
В качестве клиента заданной структуры данных использовать виджет
public ListView demolist;
и работать с ним для отображения текущего состояния структуры данных как:
demolist.getItems().clear();
demolist.getItems().addAll(demo.display());
где demo - объект класса Adapter, включенный в контроллер
Adapter demo=new Adapter();
Паттерн Адаптер (Adapter) предназначен для преобразования интерфейса одного класса в интерфейс другого.Реализации данного паттерна позволяет использовать вместе классы с несовместимыми интерфейсами.
Клиент (Client) — это класс, который содержит логику программы.
Сервис (Adaptee) – сторонний интерфейс/класс, к-й Клиент не может использовать напрямую.
Адаптер (Adaptor) — это класс, который может одновременно работать и с клиентом, и с сервисом. Он реализует клиентский интерфейс и содержит ссылку на объект сервиса. Адаптер получает вызовы от клиента через методы клиентского интерфейса, а затем переводит их в вызовы методов обёрнутого объекта в правильном формате.
Рис. 1 - Диаграмма классов построения приложения по паттерну Адаптер
Интерфейс адаптера interface Adaptee должен поддерживать четыре метода:
toString (ArrayList<E>) - вывод элементов в строку;
insert(<E>) - вставка,
delete (<E>) - удаление,
find (<E>) - поиск заданного пользователь элемента (по значению E)
Пример реализации класса Адаптера:
public class Adapter {
OrArray array; // включение сервисного класса структуры данных
public Adapter() {
array = new OrArray(1000);//полустатический массив - особенность реализации OrArray
}
// метод для получения списка строк для View
public ArrayList<String> display (){
String[] subStr;
String delimeter = " ";//разделитель
subStr = array.display().split(delimeter);//разделение на подстроки
ArrayList<String> arr= new ArrayList<>(Arrays.asList(subStr));//создание динамического массива и перенос в него подстрок
return arr;
Обратите внимание! реализация метода display() в "особой" структуре данных должна возвращать строку, содержащую элементы структуры данных через разделитель, например для массива a[] размером nElems так:
public String display() // displays array contents
{
String str="";
for(int j=0; j<nElems; j++) // for each element,
str+=a[j] + " "; // display it
return str;
}