工廠是處理在不指定物件具體型別的情況下建立物件的問題。工廠方法模式的實質是「定義乙個建立物件的介面,但讓實現這個介面的類來決定例項化哪個類。工廠方法讓類的例項化推遲到子類中進行。
在物件導向程式設計中,工廠通常是乙個用來建立其他物件的物件。工廠是構造方法的抽象,用來實現不用的分配方案。
工廠物件通常包含乙個或多個方法,用來建立這個工廠所能建立的各種型別的物件。這些方法可能接收引數,用來指定物件建立的方式,最後返回建立的物件。
抽象工廠模式提供了一種方式,可以將一組具有同一主題的單獨的工廠封裝起來。在正常使用中,客戶端程式需要建立抽象工廠的具體實現,然後使用抽象工廠作為介面來建立這一主題的具體物件。客戶端程式不需要知道(或關心)它從這些內部的工廠方法中獲得物件的具體型別,因為客戶端程式僅使用這些物件的通用介面。抽象工廠模式將一組物件的實現細節與他們的一般使用分離開來。
簡單概括一下,一般工廠模式是工廠可以生產一種產品,多個型號。抽象工廠可以生產多個產品,多個型號。先上圖,下圖描述的就是一般工廠
這裡的話,工廠1就只能生產產品型號1,工廠2就只能生產產品型號2,下面用實際**實現來描述一般工廠模式:
這裡宣告乙個交通工具產品,它包含了car和plane兩種型號的交通工具,這兩種工具都有乙個相同的動作就是run。
1上面我們定義了交通工具裡面的兩種產品,下面我們將定義生產這些交通工具的工廠:@inte***ce
vehicle : nsobject
3 - (void
)run;
4@end56
@implementation
vehicle
7 - (void
)run
9@end
1011
12@inte***ce
car : vehicle
14 - (void
)run;
15@end
1617
@implementation
car18 - (void
)run
21@end
2223
24@inte***ce
plane : vehicle
26 - (void
)run;
27@end
2829
@implementation
plane
30 - (void
)run
33@end
@inte***ce現在我們具體使用:vehiclefactory : nsobject
- (vehicle *)createvehicle;
@end
@implementation
vehiclefactory
- (vehicle *)createvehicle
@end
@inte***ce
ca***ctory : vehiclefactory
- (vehicle *)createvehicle;
@end
@implementation
ca***ctory
- (vehicle *)createvehicle
@end@inte***ce
planefactory : vehiclefactory
- (vehicle *)createvehicle;
@end
@implementation
planefactory
- (vehicle *)createvehicle
@end
1下面就給出抽象工廠的圖,具體例項就不再**描述,大致意思如下:@inte***ce
usevehicle : nsobject
3 - (void
)usevehicle;
4@end56
@implementation
usefactory
7 - (void
)usevehicle
13@end
在objective-c裡面實際上是沒有抽象類這個概念了,但是可以通過一些手段讓某乙個類達到抽象類的效果,此方法就是在直接呼叫抽象類的方法的時候丟擲異常,例如:
1 - (id)somemethod:(someobject *)blah2
1 - (id)init27
8 self =[super init];9if
(self)
1213
return
self;
14 }
Objective C 外觀模式
今天和大家分享的是外觀模式。這個模式也不難,我猜想很多人都不經意間用過。好吧,先讓我們看看他是如何定義的。外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義 乙個高層介面,這個介面使得這一子系統更加容易使用。下面給大家展示一下類的結構圖,想必大家一看就明白了 其實這個模式中,...
簡單工廠模式,工廠模式,抽象工廠模式
三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...
簡單工廠模式 工廠模式 抽象工廠模式
簡單工廠模式 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關類,對於客戶端來說,去除了與具體產品的依賴。但增加功能時,需增加 case 邏輯判斷分支條件,修改了原有的類,我們不但對擴充套件開發了,對修改也開放了,違背了開放 封閉原則。工廠方法模式,定義了乙...