ビルダーパターンはどんな時に使われるか

デザインパターンとは

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

デザインパターンは、経験豊富なソフトウェア開発者の試行錯誤により得られた、ベストプラクティスです。その中でもGoF(Gang of Four)と呼ばれる4人の共著者によるパターンが特に有名であり、こららのデザインパターンを有効に活用することで開発者に様々なメリットがあります。

デザインパターンにはソフトウェア開発における2つの大きな目的があります。

・エンジニア同士の共通言語
デザインパターンの用語を理解した開発者同士であれば、より容易に互いのアイデアを比較し、議論し合うことが可能です。

・ベストプラクティス
デザインパターンは先人たちの試行錯誤の結晶です。若いエンジニアはデザインパターンを学ぶことで車輪の再発明を行うことなく、素早く優れたコード設計を学ぶことができます。

ビルダーパターンについて

Builderパターンを定義すると、「複雑なオブジェクトの構築をその表現から分離して、同じ構築プロセスで複数の異なる表現を作成できるようにする」ことです。

かなり小難しい表現となってしまいましたが、例えば以下のような場合に役立ちます。

・コンストラクタの引数が多い
・コンストラクタに設定する引数が任意のものが多い

上記の場合を一般的な書き方をするとこうなります(Javaでの記述)。


インスタンスの生成は以下

引数が多く、値の受け渡しのミスが多くなってしまいそうです。
また、任意の値も引数として渡さなければならず、記述の無駄が多くなってしまいそうですね。

ビルダーパターン(Effective Java)を利用した場合、インスタンスの生成は以下のようになります。

対象のフィールドを明確に指定できており、わかりやすくなりました。
また、任意のフィールドは設定したい場合のみ記述すればよいのでコードの無駄も減ります。

肝心のビルダーパターンを用いたクラスの記述方法は以下のようになります。

 

static内部クラスを利用して実装しています。

ビルダーパターンのサンプルコード

下記は筆者が実際にビルダーパターンを用いたクラスのインスタンスを生成するコードを書いたときのコードです。

サブスクリプションインスタンスの生成を行っています。

 

サブスクリプションには、値段・顧客情報・トライアルの有無など様々なオプションを設定することができ、それぞれの項目が必須なわけではないため、どの項目を設定するかわかりやすくなっています。

上記はビルダーパターンの力を発揮できた例だと言えます。

ビルダーパターンのまとめ

ビルダーパターンを利用すると以下のようなメリットがあります。

・渡すフィールドを明確に指定できるため、可読性が高い。
・任意のフィールド以外は記述する必要がないため、記述の無駄が減る。

ビルダーパターンに関わらず、デザインパターンは上手く利用すると様々なメリットがあります。

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス