定義
定義乙個用於建立物件的介面,讓子類決定例項化哪個類
使用場景
在任何需要生成複雜物件的地方,都可以使用工廠方法模式。復合物件適合使用工廠模式,用new就可以完成建立的物件無需使用工廠模式。
關鍵點
乙個抽象工廠—定義建立物件的介面
抽象工廠的實現類—可以是乙個實現或多個實現,用於生產需要的具體物件
乙個抽象產品—工廠方法模式所建立的產品的父類
抽象產品的實現類—需要被建立的具體產品
實現
/**
* 抽象工廠類—定義生產抽象物件的介面
*/public
abstract
class
abstractfactory
/**
* 抽象產品類—工廠模式的抽象介面需要建立返回的型別
*/public
abstract
class
abstractproduct
/**
* 抽象工廠的實現類—建立具體需要的產品
*/public
class
productfactory
extends
abstractfactory
}
/**
* 具體的產品a
*/public
class
producta
extends
abstractproduct
}
/**
* 具體的產品b
*/public
class
productb
extends
abstractproduct
}
使用
abstractfactory factory = new productfactory();
abstractproduct product = factory.createproduct();
product.showproductname();
輸出
01-01
00:05:58.728
2840-2840/com
.example
.admin
.singleinstancedemo i/product:: a
當然我們也可以在具體建立產品的工廠類裡面建立b產品。上面這種方式是最常見的需要哪乙個產品就生產哪乙個。除此之外,我們還可以利用反射的方式去更加簡潔的生產具體的產品物件,修改抽象工廠類和具體工廠類如下:
/**
* 抽象介面類—定義生產抽象物件的介面
*/public
abstract
class
abstractfactory
/**
* 抽象工廠的實現類—建立具體需要的產品
*/public
class
productfactory
extends
abstractfactory catch (exception e)
return (t) product;
}}
使用
abstractfactory factory = new productfactory();
abstractproduct product = factory.createproduct(productb.class);
product.showproductname();
輸出結果
01-01
00:26:19.950
16938-16938/com
.example
.admin
.singleinstancedemo i/product:: b
需要哪乙個類的物件就傳入哪乙個類的型別即可,這種方式比較簡介、動態,當然我們也可以為每個具體的產品定義乙個具體的工廠類,比如在第一種方式基礎上多增加乙個專門用於生產productb的工廠
/**
* 抽象工廠的實現類—建立具體需要的產品b
*/public
class
productfactoryb
extends
abstractfactory
}
然後需要a的時候使用productfactory工廠建立a例項,需要b的時候使用productfactoryb工廠建立b例項,各司其職。這樣擁有多個工廠的方式我們稱為多工廠方法模式。
當只有乙個工廠的時候,我們還是為工廠提供了乙個抽象類,是否可以將其簡化掉呢?當然是可以的:
/**
* 直接提供靜態方法—向外建立物件
*/public
class
productfactory
}
像這樣的方式又稱之為簡單工廠模式或靜態工廠模式
小結
工廠方法模式降低了物件之間的耦合度,依賴於抽象的架構,將例項化的任務交由子類去完成,有非常好的擴充套件性,符合軟體設計原則。
優點:1.在工廠方法中,使用者只需要知道所要產品的具體工廠,無須關係具體的建立過程,甚至不需要具體產品類的類名。
2.在系統增加新的產品時,我們只需要新增乙個具體產品類和對應的實現工廠,無需對原工廠進行任何修改,很好地符合了「開閉原則」。
缺點:1.每次增加乙個產品時,都需要增加乙個具體類和物件實現工廠,是的系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。
設計模式 工廠方法模式
一 工廠方法 factory method 模式 工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到工廠子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角...
設計模式 工廠方法模式
1 factorymethod.h ifndef factorymethod h define factorymethod h include include using namespace std class osproduct 產品,product,產品的抽象類 class windowspro...
設計模式 工廠方法模式
框架的基礎知識 對框架的理解 框架和設計模式的關係 工廠方法模式 定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,factory method使乙個類的例項化延遲到其子類。結構 產品 public inte ce product 具體產品 public class productimpl...