На основе интерфейса

[public] interface Voiceable {//пакетный доступ [либо доступен всем]

void voice ();

}

class Dog implements Voiceable {

public void voice (){ System.out.println (“GAV!”);}

}

class BMW extends Car implements Serializable, Voiceable {

public void voice () {System.out.println (“Beep!”);}

}

public class Chorus {

public static void main (String [] args) {

Voiceable [] singer = new Voiceable [4];

singer [0] = new Dog ();.....

singer [3] = new BMW ();

for (int i=0; i<singer.length; i++)

singer [i]. voice ();

}

}

Интерфейсы, как средство адаптации

interface TextReceiver {

void receiveText (String text);

}

class TickerTape implements TextReceiver {

public void receiveText (String text){ // реализация метода

интерфейса

System.out.println (“TICKER:\n” + text + “\n”);

}

}

class TextSource {

TextReceiver receiver; //поле

TextSource (TextReceiver r) { //конструктор

receiver = r;

}

public void sendText (String s) {

receiver.receiveText (s);

}

}

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

Это паттерн ”Стратегия” (Strategy). Основан на композиции (делегировании).

public class TextSourceTest {

public static void main (String [] args) {

TextReceiver tr = new TickerTape ();//new AdaptedTape();

TextSource ts = new TextSource (tr);

ts.sendText (“Hello”);

}

}

Пусть у нас есть класс, не реализующий TextReceiver.

class Tape {

public void print (String text);

System.out.println (“Tape” + text);

}

}

Разработаем адаптер:

public class AdaptedTape implements TextReceiver{

Tape tape;

public AdapterTape (Tape tape){ // конструктор

this.tape = tape;

}

public void receiveText (String text){

tape.print (text); // делегирование

}

}

Конструктор адаптера получает объект исходного класса и создает класс с требуемым интерфейсом TextReceiver. Это паттерн Адаптер (Adapter).

Интерфейсы и фабрики

Фабрика – способ получения объектов, реализующих интерфейс (виртуальный конструктор).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: