🧩 Adapterパターンの復習(Java編)
■ Adapterパターンとは?
「既存のクラスのインターフェースを、別のインターフェースに変換する」デザインパターンです。
つまり、**互換性のないクラス同士をつなぐ“橋渡し”**をするのが目的です。
■ Javaでの例
// 既存のクラス(変更できない)
class OldPrinter {
    void printText(String text) {
        System.out.println("印刷: " + text);
    }
}
// 使いたいインターフェース
interface NewPrinter {
    void print(String message);
}
// Adapterクラス
class PrinterAdapter implements NewPrinter {
    private OldPrinter oldPrinter;
    public PrinterAdapter(OldPrinter oldPrinter) {
        this.oldPrinter = oldPrinter;
    }
    @Override
    public void print(String message) {
        oldPrinter.printText(message); // 互換性のある呼び出しに変換
    }
}Adapterはあくまで“変換係”。使いたい形に「合わせる」ことで再利用性を高めます。
📱 Androidにおける Adapter の役割
Androidでは、ListView や RecyclerView にデータを表示する時に、必ず Adapter を使います。
なぜなら:
- **データ(Listなど)**はプログラム上に存在する
 - **UI(View)**は画面に描画される
 
👉 その 「データ → UI」への橋渡しが、Androidにおける Adapter の役割です。
🎨 AndroidのAdapter 実装例(ListView)
たとえば、以下のようなリストを表示したいとします:
List<String> items = Arrays.asList("りんご", "バナナ", "みかん");■ ArrayAdapter を使う例
ListView listView = findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<>(
    this,
    android.R.layout.simple_list_item_1,
    items
);
listView.setAdapter(adapter);items: データのリストsimple_list_item_1: 1行のレイアウトArrayAdapter: データを1行のテキストに変換する変換器(=Adapter)
ArrayAdapterは簡易版。複雑なデータ表示にはRecyclerView.Adapterを使います。
🔁 RecyclerView.Adapter の実装(より現代的)
RecyclerView はより高速で柔軟なリスト表示コンポーネントで、Adapterの実装が必須です。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> dataList;
    public MyAdapter(List<String> list) {
        this.dataList = list;
    }
    // 1. 表示用のViewを生成
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                     .inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(view);
    }
    // 2. Viewにデータをバインド
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textView.setText(dataList.get(position));
    }
    // 3. アイテム数を返す
    @Override
    public int getItemCount() {
        return dataList.size();
    }
    // ViewHolderの定義
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView;
        public ViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(android.R.id.text1);
        }
    }
}💡 Adapter実装のポイントまとめ
| 項目 | 説明 | 
|---|---|
Adapter | データと表示をつなぐ橋渡し | 
ViewHolder | 各行のViewの保持者(findViewByIdを毎回しないための最適化) | 
onCreateViewHolder() | 各アイテムのView生成 | 
onBindViewHolder() | 各アイテムへのデータバインド | 
getItemCount() | アイテム数の取得 | 
🔚 まとめ
- JavaのAdapterパターンと同様、Androidでも「形式の変換」と「仲介役」がキーワード。
 - AndroidのAdapterは、「データ(Listなど)」と「View(UI部品)」の接着剤のような役割を持つ。
 ListViewではArrayAdapterを、より柔軟なRecyclerViewでは独自のAdapterを実装。
