LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

Adaptorパターンに触れてみる

Posted at

今日の目標

Adaptorパターンに触れてみる

使うもの

ではスタート

はじめに

Adaptorパターンとは何か。まずはWikipediaを見てみよう。

Adapter パターン(アダプター・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。Adapter パターンを用いると、既存のクラスに対して修正を加えることなく、インタフェースを変更することができる。Adapter パターンを実現するための手法として継承を利用した手法と委譲を利用した手法が存在する。

既存クラスがあって、そいつに手を加えることなく、新しい呼び出し方で呼べるようにしよう!ということらしい。単なる中継役と考える。

本のサンプルを試してみる

  • Banner
    • もともと存在するクラス
  • Print(Interface)
    • 新しく呼び出し方が指定されているインタフェース
  • PrintBanner
    • BannerとPrintとの仲介役
Banner.java
package banner;

public class Banner {

    private String str;

    public Banner(String str) {
        this.str = str;
    }

    public void showWithParen() {
        System.out.println("(" + str + ")");
    }

    public void showWithAster() {
        System.out.println("*" + str + "*");
    }
}
Print.java
package banner;

public interface Print {

    public abstract void printWeak();

    public abstract void printStrong();
}
PrintBanner.java
package banner;

public class PrintBanner extends Banner implements Print {

    public PrintBanner(String str) {
        super(str);
    }

    @Override
    public void printWeak() {
        showWithParen();
    }

    @Override
    public void printStrong() {
        showWithAster();
    }
}
Main.java
package banner;

public class Main {

    public static void main(String[] args) {
        Print p = new PrintBanner("Hello");
        p.printStrong();
        p.printWeak();
    }
}

こんな感じ。
Adapterの実装方法は継承と委譲という2パターンあるが、上記は継承パターン(PrintBannerがBannerをextendsしている)で作成している。

PrintBanner(絵の中ではAdapterになってるが)が生まれた経緯はこんな感じか。
image1(2).JPG

まとめ

Adapterパターンは、こんな場合に使う。

  • 今までの呼び方じゃなくて、違う呼び方で呼びたいなあ
  • でも今までのソースに手を加えたくないなあ
  • そんなときにAdaptor!

また、継承と委譲の2パターンがあるので状況によって使い分ける(委譲のソースコードは「使うもの」に記したサンプルプログラムを参照のこと)。

途中で「Adapterは中間管理職だ」と思った。お疲れAdapter。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up