簡單工廠模式(Simple Factory Pattern):專門定義一個類(工廠類)來負責建立其餘類的實例。能夠根據建立方法的參數來返回不一樣類的實例,被建立的實例一般都具備共同的父類。git
舉例:github
簡單工廠模式像一個代工廠,一個工廠能夠生產多種產品。舉個例子,一個飲料加工廠同時幫百事可樂和可口可樂生產,加工廠根據輸入參數Type
來生產不一樣的產品。編程
// 可樂抽象類
@interface Cola : NSObject
@end
// 可口可樂產品類
@interface CocaCola : Cola
@end
// 百事可樂產品類
@interface PesiCola : Cola
@end
// 簡單工廠實現
@implementation SimpleFactory
+ (Cola *)createColaWithType:(NSInteger)type { switch (type) { case 0: return [CocaCola new]; case 1: return [PesiCola new]; default: return nil; break; } } @end
// 0 生產可口可樂
Cola *cocaCola = [SimpleFactory createColaWithType:0];
// 1 生產百事可樂
Cola *pesiCola = [SimpleFactory createColaWithType:1];
優勢:設計模式
缺點:bash
工廠方法模式(Factory Method Pattern)又稱爲工廠模式,工廠父類負責定義建立產品對象的公共接口,而工廠子類則負責生成具體的產品對象,即經過不一樣的工廠子類來建立不一樣的產品對象。ui
舉例:atom
工廠方法和簡單工廠有一些區別,簡單工廠是由一個代工廠生產不一樣的產品,而工廠方法是對工廠進行抽象化,不一樣產品都由專門的具體工廠來生產。可口可樂工廠專門生產可口可樂,百事可樂工廠專門生產百事可樂。spa
// 工廠抽象類
@implementation Factory
+ (Cola *)createCola {
return [Cola new]; } @end // 可口可樂工廠 @implementation CocaColaFactory + (Cola *)createCola { return [CocaCola new]; } @end // 百事可樂工廠 @implementation PesiColaFactory + (Cola *)createCola { return [PesiCola new]; } @end
// 根據不一樣的工廠類生產不一樣的產品
Cola *pesiCola = [PesiColaFactory createCola];
Cola *cocaCola = [CocaColaFactory createCola];
複製代碼
優勢:設計
缺點:code
抽象工廠模式(Abstract Factory Pattern):提供一個建立一系列相關或相互依賴對象的接口,而無須指定它們具體的類。
舉例:
抽象工廠和工廠方法不一樣的地方在於,生產產品的工廠是抽象的。舉例,可口可樂公司生產可樂的同時,也須要生產裝可樂的瓶子和箱子,瓶子和箱子也是可口可樂專屬定製的,一樣百事可樂公司也會有這個需求。這個時候咱們的工廠不只僅是生產可樂飲料的工廠,還必須同時生產同一主題的瓶子和箱子,因此它是一個抽象的主題工廠,專門生產同一主題的不一樣商品。
// 可樂抽象類和派生類
@interface Cola : NSObject
@end
@interface CocaCola : Cola
@end
@interface PesiCola : Cola
@end
// 瓶子抽象類和派生類
@interface Bottle : NSObject
@end
@interface CocaColaBottle : Bottle
@end
@interface PesiColaBottle : Bottle
@end
// 箱子抽象類和派生類
@interface Box : NSObject
@end
@interface CocaColaBox : Box
@end
@interface PesiColaBox : Box
@end
// 工廠抽象類
@implementation Factory
+ (Cola *)createCola {
return [Cola new]; } + (Bottle *)createBottle { return [Bottle new]; } + (Box *)createBox { return [Box new]; } @end // 可口可樂主題工廠 @implementation CocaColaFactory + (CocaCola *)createCola { return [CocaCola new]; } + (CocaColaBottle *)createBottle { return [CocaColaBottle new]; } + (CocaColaBox *)createBox { return [CocaColaBox new]; } @end // 百事可樂主題工廠 @implementation PesiColaFactory + (PesiCola *)createCola { return [PesiCola new]; } + (PesiColaBottle *)createBottle { return [PesiColaBottle new]; } + (PesiColaBox *)createBox { return [PesiColaBox new]; } @end
// 可口可樂主題
Cola *cocaCola = [CocaColaFactory createCola];
Bottle *cocaColaBottle = [CocaColaFactory createBottle];
Box *cocaColaBox = [CocaColaFactory createBox];
// 百事可樂主題
Cola *pesiCola = [PesiColaFactory createCola];
Bottle *pesiColaBottle = [PesiColaFactory createBottle];
Box *pesiColaBox = [PesiColaFactory createBox];
優勢:
缺點:
單例模式(Singleton Pattern):單例模式確保某一個類只有一個實例,並提供一個訪問它的全劇訪問點。
舉例:
單例模式下,對應類只能生成一個實例。就像一個王國只能有一個國王,一旦王國裏的事務多起來,這惟一的國王也容易職責太重。
@implementation Singleton
+ (instancetype)shareInstance {
static Singleton *shareInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareInstance = [[Singleton alloc] init];
});
return shareInstance; } @end
優勢:
缺點:
生成器模式(Builder Pattern):也叫建立者模式,它將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。
舉例:
生成器模式將複雜的建立邏輯進行分割,例如生產汽車,分步驟建立安裝不一樣的零件。若是建立邏輯簡單則沒有拆分的必要。
// 汽車生產器 @interface Builder : NSObject + (void)buildEngine; + (void)buildWheel; + (void)buildBody; @end
// 建立過程進行拆分 Builder *builder = [Builder new]; [builder buildBody]; [builder buildWheel]; [builder buildEngine];
優勢:
缺點:
原型模式(Prototype Pattern): 使用原型實例指定待建立對象的類型,而且經過複製這個原型來建立新的對象。
舉例:
原型模式就像複印技術,根據原對象複印出一個新對象,並根據需求對新對象進行微調。
@interface Student : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *age; @property (nonatomic, copy) NSString *class; @property (nonatomic, copy) NSString *school; @end
// 原對象
Student *lily = [Student alloc] init];
lily.name = @"lily"; lily.age = @"13"; lily.class = @"五年一班"; lily.school = @"實現學校"; // 複製原對象 Student *tom = [lily copy]; // 在原對象基礎上微調 tom.name = @"tom";
優勢:
缺點: