ビルダー デザイン パターンとは

ビルダー デザイン パターンとは

Builder 設計パターンは、オブジェクトのプロパティをカプセル化し、その表現を構築できるようにします。このパターンを使用すると、同じクラスに属していても、異なるプロパティを持つ複雑なオブジェクトを構築できます。

一般的なオブジェクト クラスには、属性、コンストラクター、およびメソッドが含まれます。ビルダー パターンを使用すると、オブジェクト クラスから構築ロジックを抽出し、それをビルダーと呼ばれるクラスに配置できます。次に、これらのビルダー クラスを使用して、同じオブジェクトのさまざまなバリエーションを作成できます。

Java でビルダー パターンを実装する

ビルダー パターンの良い例は、顧客がさまざまなトッピング オプションを選択できるピザ注文システムです。

製品クラス

1 つのアプローチは、ビルダーをインターフェースにすることですが、最初に製品クラスを作成する必要があります。このサンプル アプリケーションの製品はピザです。

public class Pizza {
    // properties
    private int orderNumber;
    private String pizzaDough;
    private String topping;

    // getters and setters
    public int getOrderNumber() {
        return orderNumber;
    }

    public void setOrderNumber(int orderNumber) {
        this.orderNumber = orderNumber;
    }

    public String getPizzaDough() {
        return pizzaDough;
    }

    public void setPizzaDough(String pizzaDough) {
        this.pizzaDough = pizzaDough;
    }

    public String getTopping() {
        return topping;
    }

    public void setTopping(String topping) {
        this.topping = topping;
    }
}

ビルダークラス

Pizza Java クラスには 3 つのプロパティと、それぞれのゲッターとセッターがありますが、コンストラクター メソッドはありません。ビルダー インターフェイスを使用すると、ピザ オブジェクトの各側面を個別に作成できます。その後、ピザ オブジェクト全体を取得できます。

public interface Builder {
    public void createPizzaDough();
    public void createTopping();
    public Pizza getPizza();
}

サンプルのピザ アプリケーションでは、顧客は、チーズ、ペパロニ、タマネギ、またはさまざまな組み合わせなど、任意のトッピングを注文できます。したがって、顧客が注文する 1 つのピザはチーズです。

public class CheesePizzaBuilder implements Builder {
    private Pizza pizza;

    public CheesePizzaBuilder() {
        this.pizza = new Pizza();
    }

    @Override
    public void createPizzaDough() {
        this.pizza.setPizzaDough("Dough");
    }

    @Override
    public void createTopping() {
        this.pizza.setTopping("Cheese");
    }

    @Override
    public Pizza getPizza() {
        return this.pizza;
    }
}

CheesePizzaBuilder クラスは Builder インターフェースを実装し、それを使用して新しいチーズ ピザを作成します。これは Pizza オブジェクトの 1 つの表現です。また、Pizza クラスから独立した方法でこれを行います。

CheesePizzaBuilder クラスは、Pizza クラスについてあまり知りません。機能を完了するために知っておく必要があることだけを知っています。Pizza クラスには生地とトッピングのプロパティがあることを認識しており、これらのプロパティをすべてのチーズ ピザが持つ 2 つの特定の値に設定します。これで、アプリケーションが CheesePizzaBuilder クラスを呼び出すたびに、チーズ トッピングを含む新しいピザが作成されます。

ディレクタークラス

ディレクター クラスはビルダー パターンの重要な側面です。具象ビルダー クラスの唯一の目的は、特定のオブジェクトを作成することです。これは、オブジェクトのさまざまな部分を別々に作成することによって実現されます。

ただし、ビルダーの具象クラスはアルゴリズムを認識しません。トッピングを追加する前に生地を構築することを知っているビルダー クラスはありません。これはディレクタークラスの機能です。

public class Director {
    private Builder pizzaBuilder;

    public Director(Builder pizzaBuilder) {
        this.pizzaBuilder = pizzaBuilder;
    }

    public Pizza getPizza() {
        return this.pizzaBuilder.getPizza();
    }

    public void makePizza() {
        this.pizzaBuilder.createPizzaDough();
        this.pizzaBuilder.createTopping();
    }
}

Director クラスはビルダー インターフェイスを使用してピザを作成します。アルゴリズムのキーパーです。

ビルダー デザイン パターンを使用する利点

ビルダー デザイン パターンを使用する主な利点は、そのカプセル化プロパティです。これは、安全なアプリケーションの開発に役立つため、ソフトウェア エンジニアリングの重要な側面です。

この設計パターンのもう 1 つの利点は、そのオブジェクト構築アプローチです。各ステップが独立している多段階プロセスを作成できるため、デバッグが容易になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です