【重構與模式】6.4 用Factory Method引入多態建立

  當一個層次中的類都類似的實現一個方法,只是對象建立的步驟不一樣時,能夠建立調用Factory Method來處理實例化方法的惟一超類版本 java

(把子類的相似方法改爲相同的而後提取到超類裏面) ide

public class Bike {
	private Bike bike;
	public void dajiangyou(){
		bike = new Bike();
		System.out.println("騎自行車打醬油去");
	}
}
public class Car {
	private Car car;
	public void dajiangyou(){
		car = new Car();
		System.out.println("開車打醬油去");
	}
}

重構後: spa

public class NewCar extends TransportFactory{
	
	public NewCar(){
		System.out.println("drive car");
	}
	@Override
	protected TransportFactory create() {
		return new NewCar();
	}
}
public class NewBike extends TransportFactory{
	public NewBike(){
		System.out.println("take bike");
	}
	@Override
	protected TransportFactory create() {
		return new NewBike();
	}
}
public abstract class TransportFactory {
	
	protected TransportFactory transport;
	protected abstract TransportFactory create();
	
	public void dajiangyou(){
		transport = create();
		System.out.println("打醬油去");
	}
}
public static void main(String[] args) {
		TransportFactory t = new NewCar();
		t.dajiangyou();
	}

動機: code

  Factory Method是OOP中最多見的模式,因其提供了多臺建立對象的方法
  使用Factory Method後的代碼每每比在類中賦值方法來建立自定義對象要簡單
  使用Factory Method的主要狀況:
    當兄弟子類實現了除對象建立步驟外都很類似的方法時
    當超類和子類實現了除對象建立步驟外都很類似的方法時
優缺點:
  + 減小因建立自定義對象而產生的重複代碼
  + 有效的表達了對象建立發生的位置,以及如何重寫對象的建立
  + 強制Factory Method使用的類必須實現統一的類型
  - 可能會向Factory Method的一些實現者傳遞沒必要要的參數
相關文章
相關標籤/搜索