目次

【デザインパターン】JavaのAdapterパターンについて

今回はAdapterパターンについて解説します。

September 15, 20233 min read
Java
デザインパターン

Adaper パターン

既存のクラスに手を加えずに用途だけを伝えるイメージです。 既存クラスを直接使おうとすると、その処理がどのようになっているのか知らなければいけませんし依存関係も深くなります。 これを防ぐために使います。今回は Java の properties クラスを用いて実際に使っていきます。

実装

FileIO インターフェース

このインターフェースのメソッドを Main クラスで使用します。 Main クラスはこれらのメソッドの引数と返り値だけ分かれば使用することができます。

java
import java.io.IOException;

public interface FileIO {
    void createNewFile(String filename) throws IOException;
    void readFromFile(String filename) throws IOException;

    void writeToFile(String filename) throws IOException;

    void setValue(String key, String value);

    String getValue(String key);
}

FileProperties クラス

具体的な処理です。 Main クラスからこの処理は見えないため安全に処理を書き換えることができます。

java
import java.io.IOException;

public class FileProperties implements FileIO {
    public Properties properties;

    public FileProperties() {
        this.properties = new Properties();
    }

    @Override
    public void createNewFile(String filename) throws IOException {
        this.properties.store(new FileOutputStream(filename));
    }

    @Override
    public void readFromFile(String filename) throws IOException {
        this.properties.load(new FileInputStream(filename));
    }

    @Override
    public void writeToFile(String filename) throws IOException {
        this.properties.store(new FileOutputStream(filename), "written by FileProperties");
    }

    @Override
    public void setValue(String key, String value) {
        this.properties.setProperty(key, value);
    }

    @Override
    public String getValue(String key) {
        return this.properties.getProperty(key);
    }
}

Main クラス

具体的な処理を Main クラスから分離することができました。

java
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        FileIO f = new FileProperties();
        try {
            f.createNewFile("file.txt");
            f.readFromFile("newfile.txt");
            f.setValue("year", "2004");
            f.setValue("month", "4");
            f.setValue("day", "21");
            f.writeToFile("newfile.txt");
            System.out.println("newfile.txt is created.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

実行結果

#written by FileProperties
#Fri Sep 15 15:06:23 JST 2023
day=21
month=4
year=2004

まとめ

Adapter パターンを用いることで既存のクラスを用いて用途を定義し、その実装を Main クラスから隠して利用することができました。

See you later👋


0

Conversation