個人博客CoorChice,https://chenbingx.github.io/ ,最新文章將會首發CoorChice的博客,歡迎探索哦 !
同時,搜索微信公眾號CoorChice
,或掃描文章末尾二維碼,可以關注我的微信公眾號。同期文章也將會優先推送到微信公眾號中,以提醒您有新鮮文章出爐。
封面-設計模式.png
工廠方法模式和簡單工廠模式本質是類似的,都是用來封裝產品的創建過程。但它們的實現也有很大的,所以通常被作為兩種不同的設計模式看待。
定義及實質
-
定義
定義一個用于創建對象的接口,讓子類決定實例化那一個對象,即使一個類的實現延遲到子類實現。 -
實質
延遲到子類選擇實現。
雖然都是選擇實現,但工廠方法模式主要用于創建一系列的產品簇(就是相似的東西),而簡單工廠法可以創建任何互相沒有關聯的實例。
模式圖解
工廠方法模式UML圖
工廠方法模式UML圖
從上圖可以看出:
- Creator是抽象父類,ConcreteCreator是其子類;
- ConcreteCreator重寫了父類的factoryMethod() 來創建真正的產品ConcreteProduct,也就是說ConcreteCreator依賴ConcreteProduct;需要注意,Creator依賴的是Product;
- ConcreteProduct實現了Product接口。
//Creator
public abstract class Creator{
public abstrat Product factoryMethod();
public void someOpration(){
//在這里延遲創建了Product
factorMethod().doSomthing();
}
}
//ConcreteCreator
public class ConcreteCreator extends Creator{
@Overrid
public Product factoryMethod(){
return new ConcreteProduct();
}
}
//Product
public interface Product{
void doSomthing();
}
//public class ConcreteProduct implement Product{
@Overrid
public void doSomthing(){
System.out.println("ConcreteProduct");
}
}
下面看看Client怎么使用:
public class Client{
priavte Creator creator;
public static void main(String[] args){
creator = new ConcreteCreator(); //創建符合需求的Creator子類
creator.someOpration(); //調用這個方法才會創建Product
}
}
工廠方法模式順序圖
工廠方法模式順序圖
結合上面的代碼看。
模式優缺點
優勢
- 體現了依賴倒置 的原則,使程序的可擴展性增強,當有新需求時,只需要增加新的Creator子類,替換Client中的子類,而不需要修改其它地方;
- 可以在不知道對象創建過程未確定的情況下進行編程;
- 可以很好的鏈接平行類層次結構。
缺點
- 工廠類和產品類耦合在一起。
拓展
平行類層次結構
指一個類層級(工廠方法模式中,每個Creator的抽象就代表著一個類層級)中的每一個類,在另一個類層級中都有對應的類與之呼應,這樣的一組類層就稱為平行類層次結構 。
解釋:
以Shape為例,具體的Shape對象和Shape對象的行為就構成了平行類層次結構。Shape對象層級中有Rectangle、Oval等,在Shape對象行為層級中,有Rectangle、Oval等的面積、周長等行為與之對應。所以它們構成了平行類層次結構。
CoorChice的公眾號