BuilderデザインパターンとFactoryデザインパターンの違いと使用方法


Builderデザインパターンは、複雑なオブジェクトの作成プロセスを抽象化し、オブジェクトの構築手順を明示的に定義するために使用されます。このパターンでは、オブジェクトの構築手順を表すBuilderクラスがあります。Builderクラスは、オブジェクトの各部分を作成し、最終的なオブジェクトを返すメソッドを提供します。これにより、異なるオブジェクトの構築手順を定義し、同じBuilderクラスを使用して異なるオブジェクトを作成できます。

以下に、Builderパターンの例を示します。

public class Car {
    private String brand;
    private String model;
    private int year;

    // プライベートなコンストラクタ
    private Car() {}

    public String getBrand() {
        return brand;
    }

    public String getModel() {
        return model;
    }

    public int getYear() {
        return year;
    }
// Builderクラス
    public static class Builder {
        private Car car;

        public Builder() {
            car = new Car();
        }

        public Builder setBrand(String brand) {
            car.brand = brand;
            return this;
        }

        public Builder setModel(String model) {
            car.model = model;
            return this;
        }

        public Builder setYear(int year) {
            car.year = year;
            return this;
        }

        public Car build() {
            return car;
        }
    }
}
// 使用例
Car car = new Car.Builder()
    .setBrand("Toyota")
    .setModel("Camry")
    .setYear(2020)
    .build();

以下に、Factoryパターンの例を示します。

public interface Shape {
    void draw();
}
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("円を描画します。");
    }
}
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("四角形を描画します。");
    }
}
public class ShapeFactory {
    public Shape createShape(String shapeType) {
        if (shapeType.equalsIgnoreCase("circle")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("rectangle")) {
            return new Rectangle();
        }
        return null;
    }
}
// 使用例
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.createShape("circle");
circle.draw(); // "円を描画します。" と出力される
Shape rectangle = shapeFactory.createShape("rectangle");
rectangle.draw(); // "四角形を描画します。" と出力される

デザインパターンは、ソフトウェア開発の中で一般的に使用される再利用可能なソリューションの設計手法です。BuilderパターンとFactoryパターンは、オブジェクトの生成に関連して使用される2つのデザインパターンです。

Builderデザインパターンは、複雑なオブジェクトの作成プロセスを抽象化し、オブジェクトの構築手順を明示的に定義するために使用されます。このパターンでは、オブジェクトの構築手順を表すBuilderクラスがあります。Builderクラスは、オブジェクトの各部分を作成し、最終的なオブジェクトを返すメソッドを提供します。これにより、異なるオブジェクトの構築手順を定義し、同じBuilderクラスを使用して異なるオブジェクトを作成できます。

以下に、Builderパターンの例を示します。

public class Car {
    private String brand;
    private String model;
    private int year;

    // プライベートなコンストラクタ
    private Car() {}

    public String getBrand() {
        return brand;
    }

    public String getModel() {
        return model;
    }

    public int getYear() {
        return year;
    }
// Builderクラス
    public static class Builder {
        private Car car;

        public Builder() {
            car = new Car();
        }

        public Builder setBrand(String brand) {
            car.brand = brand;
            return this;
        }

        public Builder setModel(String model) {
            car.model = model;
            return this;
        }

        public Builder setYear(int year) {
            car.year = year;
            return this;
        }

        public Car build() {
            return car;
        }
    }
}
// 使用例
Car car = new Car.Builder()
    .setBrand("Toyota")
    .setModel("Camry")
    .setYear(2020)
    .build();

以下に、Factoryパターンの例を示します。

public interface Shape {
    void draw();
}
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("円を描画します。");
    }
}
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("四角形を描画します。");
    }
}
public class ShapeFactory {
    public Shape createShape(String shapeType) {
        if (shapeType.equalsIgnoreCase("circle")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("rectangle")) {
            return new Rectangle();
        }
        return null;
    }
}
// 使用例
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.createShape("circle");
circle.draw(); // "円を描画します。" と出力される
Shape rectangle = shapeFactory.createShape("rectangle");
rectangle.draw(); // "四角形を描画します。" と出力される

Builderデザイン