一、工廠方法定義
定義一個建立對象的接口,但讓實現這個接口的類來決定實例化哪一個類,工廠方法讓類的實例化推遲到子類中進行。
適用場景:
1) 建立對象須要大量重複的代碼
2) 客戶端(應用層)不依賴於產品類實例如何被建立、實現等細節
3) 一個類經過其子類來指定建立哪一個對象
優勢:
1) 用戶只須要關心所需產品對應的工廠,無須關心建立細節
2) 加入新產品符合開閉原則,提升可擴展性
缺點:
1) 類的個數容易過多,增長複雜度
2) 增長了系統的抽象性和理解難度
二、代碼演示
![clipboard.png clipboard.png](http://static.javashuo.com/static/loading.gif)
public abstract class Video {
public abstract void produce();
}
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("錄製Python課程視頻");
}
}
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("錄製Java課程視頻");
}
}
public abstract class VideoFactory {
public abstract Video getVideo();
}
public class PythonVideoFactory extends VideoFactory {
@Override
public Video getVideo() {
return new PythonVideo();
}
}
public class JavaVideoFactory extends VideoFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}
}
public class Test {
public static void main(String[] args) {
VideoFactory videoFactory = new PythonVideoFactory();
Video video = videoFactory.getVideo();
video.produce();
videoFactory = new JavaVideoFactory();
video = videoFactory.getVideo();
video.produce();
}
}