オブジェクトの作成を簡略化する
クラスを拡張していく中で、それぞれ異なる構成を持つコンストラクターを増やし続けたことはありませんか? オブジェクト生成コードを別のクラスに分けて、もっと読みやすく整理したいと思ったことはありませんか?
パターンにリファクタリング(英語)本のすぐ外にあるシナリオを見てみましょう。 ここでは、それらが取るパラメーターに本当の意図を隠しているいくつかのローンコンストラクターがあります:
public class Loan
{
public Loan(double commitment, int riskRating, int maturity)
{
// implementation omitted
}
public Loan(double commitment, int riskRating, int maturity, DateTime expiry)
{
// implementation omitted
}
public Loan(double commitment, double outstanding, int riskRating, int maturity, DateTime expiry)
{
// implementation omitted
}
}
それでは、これらのコンストラクターをファクトリメソッドにリファクタリングしましょう。 これを行うには、各コンストラクターを順番に取得し、 リファクタリング メニュー Control+Shift+R で選択した コンストラクターをファクトリメソッドで置換リファクタリング を使用します。

その結果、新しいファクトリメソッドに名前を付けることができますが、ファクトリメソッドを入れる別のクラスを指定することもできます。

終わるのは、 LoanFactory クラスのファクトリメソッドです:
public class LoanFactory
{
public static Loan CreateTermLoan(double commitment, int riskRating, int maturity)
{
return new Loan(commitment, riskRating, maturity);
}
}
これをすべての関連するコンストラクターに対して行うと、完全なファクトリクラスが生成されます。 ファクトリメソッドを元のクラス(Loan など)に配置すると、対応するコンストラクターがプライベートになります。 ただし、これらのコンストラクターを別のファクトリクラスに移動したため、コンストラクターはパブリックのままです。
2026 年 6 月 12 日