設計模式——工廠模式之工廠方法

簡單來說,工廠方法就是定義一個統一的接口(協議),用於創建對象,然後由子類去進行實現,我只定義工廠規範標準,具體的實現交給具體的工廠,去生產對應的產品,這樣幹到底有什麼用呢?還是解除耦合。


比如我們讓工廠生產電腦,他有這樣幾個角色

第一個角色:抽象工廠(例如:IComputerFactory)

第二個角色:具體工廠(例如:LennovoComputerFactory)

第三個角色:抽象產品(例如:IComputer)

第四個角色:具體產品(例如:LenovoComputer)

它們的關係是這樣的


先來定義一個抽象的商品IComputer,他去定義一個協議 ,然具體的商品區實現
//電腦規範
@protocol IComputer <NSObject>

//處理器
-(void)cpu;

//主板
-(void)mainborad;
在具體的商品中區實現這些協議
LenovoComputer.h
@interface LenovoComputer : NSObject<IComputer>
LenovoComputer.m
//處理器
-(void)cpu{
    NSLog(@"Intel 處理器");
}

//主板
-(void)mainborad{
    NSLog(@"Intel主板");
}
還可以有其他的很多商品,如MacbookComputer,SamsungComputer,也遵循抽象商品的協議,並去實現這些協議。
在抽象的工廠IComputerFactory中,我們同樣去定義一個協議,然後讓具體的工廠去實現這個協議
IComputerFactory.h
//生產電腦
-(id<IComputer>)createComputer;
具體的工廠去實現這個協議
LennovoComputerFactory.h
@interface LennovoComputerFactory : NSObject<IComputerFactory>
LennovoComputerFactory.m
//生產電腦
-(id<IComputer>)createComputer{
    return [[LenovoComputer alloc] init];
}
同樣也可以有其他的具體工廠器實現這個協議,每個協議可被很多具體的對象去實現
創建的時候我們只需要指定是哪個工廠就可以了,我不管是哪個商品,生產什麼商品由具體的工廠決定
id<IComputerFactory> factory = [[LennovoComputerFactory alloc] init];
id<IComputer> product = [factory createComputer];
[product cpu];
[product mainborad];

創建的時候我們只需指定具體的工廠,讓工廠去執行創建商品的方法,這樣就達到了解耦的目的,倘若哪天我想要MacBookComputer,只需改變具體的工廠類型就可以了,很方便,即使是項目裏有50個地方需要改,也都只需動這一行代碼,試想不採用這種方式,而是在50個地方都去創建具體的商品,那麼要想全部替換就很頭疼了。

其實我們也往往會讓一個工廠支持幾種商品類型,具體創建那個商品,由外部決定

LennovoComputerFactory.m

//生產電腦
-(id<IComputer>)createComputer:(NSString*)productClassName{
    return [[NSClassFromString(productClassName) alloc] init];
}
外部傳入創建的商品類型
id<IComputerFactory> factory = [[LennovoComputerFactory alloc] init];
id<IComputer> product = [factory createComputer:@"LenovoComputer"];
[product cpu];
[product mainborad]

工廠方法也是根據不同的使用場景,有不同的形式,實際開發中要靈活應變。

工廠模式中簡單工廠的詳解http://blog.csdn.net/neveraway1993/article/details/72897149

希望對你有幫助。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章