Патерн Адаптер: опис, функції та можливості, поради по роботі

Приклад реалізації

Припустимо, у нас є клас (Bird) з методами fly () і makeSound (). А також клас (ToyDuck) з методом Squeak (). Припустимо, що у нас мало об’єктів (ToyDuck) і ми хочемо використовувати об’єкти (Bird) замість них. Птахи мають схожу функціональність, але реалізують інший інтерфейс, тому ми не можемо використовувати їх безпосередньо. Тому ми будемо використовувати шаблон адаптер. Тут наш (Client) буде (ToyDuck), а (Adaptee) – (Bird). Нижче наведено приклад реалізації проектування патерну Адаптер на Java, одному з найпоширеніших мов програмування.

interface Bird
{
public void fly();
public void makeSound();
}

class Sparrow implements Bird
{
public void fly()
{
System.out.println(“Flying”);
}
public void makeSound()
{
System.out.println(“Chirp Chirp”);
}
}

interface ToyDuck
{
public void squeak();
}

class PlasticToyDuck implements ToyDuck
{
public void squeak()
{
System.out.println(“Squeak”);
}
}

class BirdAdapter implements ToyDuck
{
Bird bird;
public BirdAdapter(Bird bird)
{
this.bird = bird;
}

public void squeak()
{
bird.makeSound();
}
}

class Main
{
public static void main(String args[])
{
Sparrow sparrow = new Sparrow();
ToyDuck toyDuck = new PlasticToyDuck();

ToyDuck birdAdapter = new BirdAdapter(sparrow);

System.out.println(“Sparrow…”);
sparrow.fly();
sparrow.makeSound();

System.out.println(“ToyDuck…”);
toyDuck.squeak();

System.out.println(“BirdAdapter…”);
birdAdapter.squeak();
}
}

Припустимо, у нас є птах, здатна робити Sound (), і пластикова іграшкова качка, яка може пищати – Squeak (). Тепер припустимо, що наш (Client) змінює вимога і хоче, щоб (ToyDuck) виконав Sound (), але як?

Рішення полягає в тому, що ми просто змінимо клас реалізації на новий клас адаптера і скажемо передати клієнту примірник птиці цього класу. От і все. Тепер змінивши лише один рядок, ми навчимо (ToyDuck) чірікать, як горобець.