工廠模式
適用場景
- 創建對象需要大量重複的代碼
- 應用層不依賴於產品類實例如何被創建實現等細節
- 一個類通過其子類來指定創建哪個對象
優點
- 用戶只需要關係所需產品對應的工廠,無需關係創建細節
- 加入新產品符合開閉原則,可提高拓展性
缺點
- 類的個數容易過多,增加複雜度
- 增加了系統的抽象性和理解難度
代碼
- 創建一個基礎類
public abstract class AbstractVideo {
/**
* 一個行爲方法
*/
public abstract void produce();
}
- 創建兩個具體類 繼承基礎類
public class JavaVideo extends AbstractVideo {
@Override
public void produce() {
System.out.println("錄製Java視頻");
}
}
public class PythonVideo extends AbstractVideo {
@Override
public void produce() {
System.out.println("錄製Python視頻");
}
}
- 創建一個工廠類基礎類
public abstract class VideoFactory {
public abstract AbstractVideo getVideo();
}
- 創建兩個具體工廠類 繼承基礎類
public class JavaVideoFactory extends VideoFactory {
@Override
public AbstractVideo getVideo() {
return new JavaVideo();
}
}
public class PythonVideoFactory extends VideoFactory {
@Override
public AbstractVideo getVideo() {
return new PythonVideo();
}
}
- 測試
/**
* 工廠方法
* @author wang
*/
public class FactoryMethod {
public static void main(String[] args) {
//通過創建對應的工廠創建具體類
VideoFactory videoFactory1 = new JavaVideoFactory();
VideoFactory videoFactory2 = new PythonVideoFactory();
AbstractVideo video1 = videoFactory1.getVideo();
AbstractVideo video2 = videoFactory2.getVideo();
video1.produce();
video2.produce();
}
}
總結
工廠方法通過創建各個具體類的工廠方法簡化多次創建類的代碼,再次調用時直接通過簡單地創建工廠方法即可直接獲得想要的方法。