簡單工廠模式
設計一個工廠類赁遗,工廠類中提供了一個接口,這個接口可以根據(jù)傳入的參數(shù)來決定創(chuàng)建哪種產品子類族铆,然后以父類的形式返回岩四,這些產品子類繼承于同一個父類。
優(yōu)點:
- 客戶端不需要知道對象的實現(xiàn)過程哥攘,只負責對象的調用剖煌,實現(xiàn)了調用與實現(xiàn)的分離。
- 降低客戶端與子類之間的耦合逝淹,隱藏子類的信息耕姊。
- 相比復雜工廠模式實現(xiàn)簡單
缺點:
- 當產品子類增加,需要修改工廠類栅葡,違背了開閉原則
- 如果增加的產品子類太多茉兰,工廠類就比較龐大,不利于維護欣簇。
我們什么時候使用簡單工廠模式呢规脸?
- 產品子類的種類比較少
- 這些產品子類繼承自同一父類
我之前做的一個關于地圖的項目,地圖上的控件:羅盤熊咽,縮放莫鸭,比例尺,圖層横殴。都繼承于同一個父類被因,重寫父類的方法創(chuàng)建子視圖,就可以使用簡單工廠模式實現(xiàn)子類的創(chuàng)建衫仑。
//工廠類.h
typedef NS_ENUM(NSUInteger, PanelType) {
PanelTypeCompass = 0, //指南針
PanelTypeScale, //比例尺
PanelTypeZoom, //縮放
PanelTypeLayer //圖層
};
@interface PanelFactory : NSObject
//MapViewBasePanel為父類
+ (MapViewBasePanel *)factoryOfPanel:(PanelType)panleType;
@end
//工廠類.m
@implementation PanelFactory
+ (MapViewBasePanel *)factoryOfPanel:(PanelType)panleType {
MapViewBasePanel *panel;
switch (panleType) {
case PanelTypeCompass:
panel = [[MapViewCompassPanel alloc] init];
break;
case PanelTypeScale:
panel = [[MapViewMapScalePanel alloc] init];
break;
case PanelTypeZoom:
panel = [[MapViewZoomPanel alloc] init];
break;
case PanelTypeLayer:
panel = [[MapViewTypePanel alloc] init];
break;
default:
break;
}
return panel;
}
@end
//客戶端調用
MapViewBasePanel *zoomPanel = [PanelFactory factoryOfPanel:PanelTypeZoom];
[zoomPanel setPanel];
相關內容:開放-關閉原則 :對修改關閉梨与,擴展開放
當有新需求時,應該在不改變原有代碼的基礎上惑畴,對現(xiàn)有的類進行擴展蛋欣,實現(xiàn)了新需求的功能航徙,又避免了因修改原有代碼而帶來的風險如贷,保持原系統(tǒng)的穩(wěn)定性陷虎,利于維護。