【重構與模式】6.2 將建立知識搬移到Factory

  當用來實例化一個類的數據和代碼在多個類中處處都是時,能夠將有關建立的知識搬移到一個Factory中 java

(針對一個類) this

動機:
  建立蔓延——將建立的職責放在了不該該承擔對象建立任務的類中,是解決方案蔓延中的一種,通常是以前的設計問題致使。
  使用一個Factory類封裝建立邏輯和客戶代碼的實例化選項,客戶能夠告訴Factory實例如何實例化一個對象,而後用同一個Factory實例在運行時執行實例化。
  Factory不須要用具體類專門實現,能夠使用一個接口定義Factory,而後讓現有的類實現這個接口。
  若是Factory中建立邏輯過於複雜,應將其重構爲Abstract Factory,客戶代碼能夠配置系統使用某個ConcreteFactory(AbstractFactory的一個具體實現)或者默認的ConcreteFactory。

  只有確實改進了代碼設計,或者沒法直接進行實例化時纔有足夠的理由進行Factory重構 設計

public class Person {
	private String name;
	
	private String phone;
	private String car;
	private String house;
	
	public Person(String name, String phone, String house, String car){
		this.name = name;
		this.phone = phone;
		this.house = house;
		this.car = car;
	}
}
public class PersonFactory {

	public Person createPoorPerson(String name){
		return new Person(name, null, null, null);
	}
	public Person createPersonWithPhone(String name, String phone){
		return new Person(name, phone, null, null);
	}
	public Person createPersonWithPhoneCar(String name, String phone, String car){
		return new Person(name, phone, null, car);
	}
	public Person createRichPerson(String name, String phone, String house, String car){
		return new Person(name, phone, house, car);
	}

}
優缺點:
  + 合併建立邏輯和實例化選項
  + 將客戶代碼與建立邏輯解耦
  - 若是能夠直接實例化,會使設計複雜化
相關文章
相關標籤/搜索