ファクトリーメソッドの設計パターン

ファクトリーメソッドの概要

ファクトリーメソッドは、オブジェクトを生成するためのインターフェースを定義し、具体的なインスタンス生成をサブクラスに委譲する設計パターンです。

計算機能のクラス設計

計算機能を実装するための抽象クラスと具象クラスを以下のように設計します。

計算処理抽象クラス


/**
 * 計算処理抽象クラス
 */
public abstract class Calculation {
    private double value1;
    private double value2;

    public abstract double computeResult();

    public double getValue1() {
        return this.value1;
    }

    public void setValue1(double value1) {
        this.value1 = value1;
    }

    public double getValue2() {
        return this.value2;
    }

    public void setValue2(double value2) {
        this.value2 = value2;
    }

    @Override
    public String toString() {
        return "Calculation{" +
                "value1=" + value1 +
                ", value2=" + value2 +
                '}';
    }
}

具体的な計算機能クラス

加算、減算、乗算、除算の各機能を具象化します。

加算クラス:


public class AddCalculation extends Calculation {
    @Override
    public double computeResult() {
        return super.getValue1() + super.getValue2();
    }
}

減算クラス:


public class SubtractCalculation extends Calculation {
    @Override
    public double computeResult() {
        return super.getValue1() - super.getValue2();
    }
}

乗算クラス:


public class MultiplyCalculation extends Calculation {
    @Override
    public double computeResult() {
        return super.getValue1() * super.getValue2();
    }
}

除算クラス:


public class DivideCalculation extends Calculation {
    @Override
    public double computeResult() {
        return super.getValue1() / super.getValue2();
    }
}

計算ファクトリーアイテラフェース


public interface CalculationFactory {
    Calculation createCalculation();
}

具体的なファクトリークラス

各計算機能に対応するファクトリーを実装します。

加算ファクトリー:


public class AddFactory implements CalculationFactory {
    @Override
    public Calculation createCalculation() {
        return new AddCalculation();
    }
}

減算ファクトリー:


public class SubtractFactory implements CalculationFactory {
    @Override
    public Calculation createCalculation() {
        return new SubtractCalculation();
    }
}

乗算ファクトリー:


public class MultiplyFactory implements CalculationFactory {
    @Override
    public Calculation createCalculation() {
        return new MultiplyCalculation();
    }
}

除算ファクトリー:


public class DivideFactory implements CalculationFactory {
    @Override
    public Calculation createCalculation() {
        return new DivideCalculation();
    }
}

ファクトリーメソッドの利用

以下はファクトリーメソッドを用いた計算処理の実行例です。


public class CalculationMethodExample {
    public static void main(String[] args) {
        CalculationFactory factory;
        Calculation calculation;
        double result;

        // 加算の計算
        factory = new AddFactory();
        calculation = factory.createCalculation();
        calculation.setValue1(1);
        calculation.setValue2(2);
        result = calculation.computeResult();
        System.out.println("加算結果: " + result);

        // 乗算の計算
        factory = new MultiplyFactory();
        calculation = factory.createCalculation();
        calculation.setValue1(1);
        calculation.setValue2(2);
        result = calculation.computeResult();
        System.out.println("乗算結果: " + result);

        // 除算の計算
        factory = new DivideFactory();
        calculation = factory.createCalculation();
        calculation.setValue1(1);
        calculation.setValue2(2);
        result = calculation.computeResult();
        System.out.println("除算結果: " + result);

        // 減算の計算
        factory = new SubtractFactory();
        calculation = factory.createCalculation();
        calculation.setValue1(1);
        calculation.setValue2(2);
        result = calculation.computeResult();
        System.out.println("減算結果: " + result);
    }
}

出力結果


加算結果: 3.0
乗算結果: 2.0
除算結果: 0.5
減算結果: -1.0

ファクトリーメソッドの特徴

ファクトリーメソッドは、生成されるオブジェクトの種類をサブクラスに委譲することで、柔軟な拡張を可能にします。

この方法は、生成ロジックの変更を親クラスではなくサブクラスに限定することで、システムの拡張性を高めます。

タグ: ファクトリーメソッド デザインパターン Java

6月19日 23:05 投稿