iOS常用設計模式——簡單工廠設計模式

來源:互聯網
上載者:User

iOS常用設計模式——簡單工廠設計模式
簡單工廠設計模式詳解

簡單工廠設計模式詳解 基本概念 結構圖 經典的樣本 範例程式碼 優點 缺點 使用條件

基本概念

“專門定義一個類來負責建立其他類的執行個體,被建立的執行個體通常具有共同的父類。”
世界上就是由一個工廠類,根據傳入的參數,動態地決定建立出哪一個產品類的執行個體。

結構圖

ConcreteProduct1和ConcreteProduct2兩個產品具有一個共同的父類IProject,簡單工廠類為SimpleFactory,負責根據傳入的不同參數來決定生產ConcreteProduct1還是ConcreteProduct2產品。

經典的樣本

最經典的樣本就是運算類,加、減、乘、除四個運算子都繼承自父類Operation,有兩個屬性和一個操作方法,這些加減乘除的對象並不是直接在ViewController中建立,而是根據輸入操作符,由簡單工廠OperationFactory來建立。

範例程式碼

(1)建立一個協議OprationProtocol,由父類Operation來遵從該協議

/* *  操作方法協議介面 */@protocol OperationProtocol -(double)getResult;@end

(2)定義加減乘除操作的父類Operation

#import OperationProtocol.h/* *  操作方法父類 */@interface Operation : NSObject@property double firstNum;//第一個運算元@property double secondNum;//第二個運算元 @end

(3)加減乘除實作類別,此處以”加”舉例說明

//OperationAdd.h檔案#import Operation.h/* *  加法實作類別 */@interface OperationAdd : Operation@end//OperationAdd.m檔案#import "OperationAdd.h"@implementation OperationAdd-(double)getResult{    double result = 0;    result = self.firstNum+self.secondNum;//"+"是OperationAdd時候使用,"+-*/"分別對應"加減乘除"    return result;}@end

(4)簡單工廠類的代碼

//OpeartionFactory.h file#import Operation.h#import OperationAdd.h#import OperationSub.h#import OperationMultiply.h#import OperationDivide.h/* *  操作工廠類 */@interface OperationFactory : NSObject//獲得操作對象+(Operation*)createOperate:(NSString*)operateStr;@end//OpeartionFactory.m file#import "OperationFactory.h"@implementation OperationFactory+(Operation*)createOperate:(NSString*)operateStr{    Operation* oper = nil;    //根據不同的操作符,建立不同的操作對象,"+-*/"分別對應"加減乘除"    if ([operateStr isEqualToString:@"+"]) {        oper = [[OperationAdd alloc] init];    }else if ([operateStr isEqualToString:@"-"]){        oper = [[OperationSub alloc] init];    }else if ([operateStr isEqualToString:@"*"]){        oper = [[OperationMultiply alloc] init];    }else if ([operateStr isEqualToString:@"/"]){        oper = [[OperationDivide alloc] init];    }    return oper;}@end

(5)用戶端代碼,在ViewController中使用OperationFactory

 NSString* strFirstNum = self.firstNumTextField.text;    NSString* strSecondNum = self.secondNumTextField.text;    Operation* oper;    oper = [OperationFactory createOperate:self.operationTextField.text];    oper.firstNum = [strFirstNum doubleValue];    oper.secondNum = [strSecondNum doubleValue];    self.resultTextField.text = [NSString stringWithFormat:@%f,[oper getResult]];

通過簡單原廠模式的重構,我們就是閑了低耦合度的代碼結構,做到了對外擴充開放,對修改關閉。如果再增加任何的操作方法,只需要繼承操作方法父類,建立一個操作子類,並且在簡單工廠類裡面多添加一個else if的判斷即可。

優點

簡單Factory 方法從代碼中消除了對應用程式特有類的耦合,調用者不必關心具體實現,取消了常建者的責任,實現了對責任的分割

缺點

工程類集中了所有產品的邏輯,一旦不能正常工作,整個系統受影響,當分類較多時,所有建立工作都在Factory 方法中實現,後期擴充較為發雜

使用條件

(1)工廠類負責建立的對象較少時;

(2)用戶端只知道傳入工廠類的參數,對於如何建立對象的邏輯不必關心時。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.