Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 Refactoring to Patterns | Utilities | Chain Constructors

パンくず

書籍 Refactoring to Patterns
Utilities
Chain Constructors

概要

Chain Constructorsについて

使用する場面

複数コンストラクタの内容が重複している。

対応方法

Chain Constructorsを適用する。
全体に共通するコンストラクタを用意し、各コンストラクタは差分のみを記述。

サンプル

RubyオーバーロードがないのでJavaのサンプルコード

リファクタリング
public class Sample {
  private String prama1;
  private String prama2;
  private String prama3;
  
  public Sample(String param1,String param2,String param3) {
    this.param1 = param1;
    this.param2 = param2;
    this.param3 = param3;
  }
  
  public Sample(String param1,String param2) {
    this.param1 = param1;
    this.param2 = param2;
    this.param3 = "";
  }
  
  public Sample(String param1) {
    this.param1 = param1;
    this.param2 = "";
    this.param3 = "";
  }
  
  public Sample() {
    this.param1 = "";
    this.param2 = "";
    this.param3 = "";
  }
}
リファクタリング
public class Sample {
  private String prama1;
  private String prama2;
  private String prama3;
  
  public Sample(String param1,String param2,String param3) {
    this.param1 = param1;
    this.param2 = param2;
    this.param3 = param3;
  }
  
  public Sample(String param1,String param2) {
    new Sample(param1,param2,"");
  }
  
  public Sample(String param1) {
    new Sample(param1,"","");
  }
  
  public Sample() {
    new Sample("");
  }
}