你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS常用設計模式——簡單工廠設計模式

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

編輯: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的判斷即可。

優點

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

缺點

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

使用條件

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

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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved