Patterns / Structural patterns
image

import java.util.*;

//Target
interface IText {
    //Request()
    String getText();
}

//Adaptee
class StringList {
    List<String> rows = new ArrayList<>();

    //SpecificRequest()
    public String getString() {
        return String.join("\n",rows);
    }

    public void add(String value) {
        rows.add(value);
    }
}

//Adapter
class TextAdapter extends StringList implements IText {
    //Request()
    public String getText() {
        return getString();
    }
}

TextAdapter getTextAdapter() {
    var adapter = new TextAdapter();
    adapter.add("line 1");
    adapter.add("line 2");
    return adapter;
}

//Client
var adapter = getTextAdapter();
var text = adapter.getText();
//text: line 1
//      line 2

System.out.println(text);


Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.