Привет опытным бойцам!..
Если у кого-нибудь будет минута/желание, посмотрите, пожалуйста, правильно ли я понял паттерн. Прилагаю комментированный код. Спасибо!
class Scratch {
static class SDCard { //Если мы хотим адаптировать этот класс (поместить в скобки конструктора,
// "вставить", так сказать, в адаптер)
private boolean isInserted = false;
public void insert(){
isInserted = true;
System.out.println("Card inserted");
}
public void read(){
if(this.isInserted){
System.out.println("Data is read");
} else {
System.out.println("Insert card carefully");
}
}
}
interface USB{ //Создаем интерфейс с нужной нам добавленной функциональностью
void connectWithUSBCable();
}
static class CardReader implements USB { // и создаем класс адаптера, имплементирующий
//НАШ интерфейс
private SDCard sdCard; // в нем создаем объект класса-приемника
public CardReader(SDCard card){ // и передаем его в конструкторе.
//Далее развлекаемся с методами.
// Можем переопределить все, можем часть,
//но тогда это не вполне Adapter.
this.sdCard = card;
System.out.println("USB connected");
}
@Override
public void connectWithUSBCable() {
insert();
read();
}
public void insert(){
sdCard.insert(); // всё делегируем принятому объекту. Никто не запрещает расширить
//функционал, но тогда это будет уже отчасти паттерн Wrapper
System.out.println("Inserted to adapter");
}
public void read () {
sdCard.read();
System.out.println("Read through adapter");
}
}
public static void main(String[] args) {
CardReader reader = new CardReader(new SDCard());
reader.connectWithUSBCable(); // после всего сделанного выше - достаточно вызова одного
//нового метода
}
}