Реалізація інтерфейсів

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

Деякі інтерфейси є чисто абстрактними – у них немає ніякого корисного універсального втілення, і вони повинні заново реалізовуватися для кожного нового класу Проте велика частина інтерфейсів може мати кілька корисних реалізацій У разі нашого інтерфейсу Attributed можна придумати кілька можливих реалізацій, в яких використовуються різні стратегії для зберігання набору атрибутів

Одна стратегія може бути простою і швидкодіючої (якщо набір містить малу кількість атрибутів) іншу можна оптимізувати для роботи з наборами рідко змінюваних атрибутів нарешті, третя може призначатися для часто мінливих атрибутів Якби існував пакет з можливими реалізаціями інтерфейсу Attributed, то клас, який реалізує цей інтерфейс, міг би скористатися однією з них або ж надати свій власний варіант

Як приклад розглянемо просту реалізацію Attributed, в якій використовується допоміжний клас javautilHashtable Пізніше це буде використано, щоб реалізувати інтерфейс Attributed для конкретного набору обєктів, які наділяються атрибутами Насамперед, клас AttributedImpl виглядає наступним чином:

import javautil*

class AttributedImpl implements Attributed

{

protected Hashtable attrTable = new Hashtable()

public void add(Attr newAttr) {

attrTableput(newAttrnemeOf(), newAttr)

}

public Attr find(String name) {

return (Attr)attrTableget(name)

}

public Attr remove(String name) {

return (Attr)attrTableremove(name)

}

public Enumeration attrs() {

return attrTableelements()

}

}

У реалізації методів AttributedImpl використовується клас Hashtable

При ініціалізації attrTable створюється обєкт Hashtable, в якому зберігаються атрибути Велика частина роботи виконується саме класом Hashtable Клас HashTable використовує метод hashCode даного обєкта для хешування Нам не доводиться писати свій метод хешування, оскільки String вже містить відповідну реалізацію hashCode

При додаванні нового атрибута обєкт Attr зберігається в хеш-таблиці, причому імя атрибута використовується в якості ключа хеширования потім по імені атрибута можна здійснювати пошук і видалення атрибутів з хеш-таблиці

Метод attrs повертає значення Enumeration, в якому наведені всі атрибути, що входять в набір Enumeration є абстрактним класом, визначеним у javautil і використовуваним класами-колекціями типу Hash table для повернення списків (див розділ Інтерфейс Enumeration) Ми також скористаємося цим типом, оскільки він надає стандартний засіб для повернення списків в Java Фактично інтерфейс Attributed визначає тип-колекцію, тому застосуємо звичайний в таких випадках механізм повернення вмісту колекції, а саме клас Enumeration Використання Enumeration має ряд переваг: стандартні класи-колекції

начебто Hashtable, в яких застосовується Enumeration, дозволяють спростити реалізацію

Attributed

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*