[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).
Интерфейсы и фабрики
Фабрика – способ получения объектов, реализующих интерфейс (виртуальный конструктор).