你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 設計模式深入學習IOS版(2)簡單工廠模式

設計模式深入學習IOS版(2)簡單工廠模式

編輯:IOS開發綜合

1 前言

我們總說面向對象要有可維護性,可擴展性,可復用性。今天我們就來學習一種簡單地設計模式--簡單工廠模式(FACTORY)。通過面向對象的封裝,繼承和多態來降低程序的耦合度。下面就讓我們來深入學習這個模式。

 

2 詳述

工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。缺點是當產品修改時,工廠類也要做相應的修改。如:如何創建及如何向客戶端提供。

我們來看一個簡單的例子:一個有關計算器的例子,用戶可以輸入兩個數和操作符號,然後得到結果,普通的思路的代碼實例:

 

 

//進行運算操作
    if ([strOperation isEqualToString:@+]) {
        NSLog(@+);
        double result = [strFirstNum doubleValue]+[strSecondNum doubleValue];
        self.ResultTextField.text = [NSStringstringWithFormat:@%f,result];
    }else if([strOperationisEqualToString:@-]){
        NSLog(@-);
        double result = [strFirstNum doubleValue]-[strSecondNum doubleValue];
        self.ResultTextField.text = [NSStringstringWithFormat:@%f,result];
    }else if([strOperationisEqualToString:@*]){
        NSLog(@*);
        double result = [strFirstNum doubleValue]*[strSecondNum doubleValue];
        self.ResultTextField.text = [NSStringstringWithFormat:@%f,result];
    }
    else if([strOperationisEqualToString:@/]){
        NSLog(@/);
        //判斷除數不能為0
        if ([strSecondNum isEqualToString:@0]) {
            NSLog(@除數不能為0);
            UIAlertView* tempAlert = [[UIAlertViewalloc] initWithTitle:@警告message:@除數不能為0 delegate:nilcancelButtonTitle:@取消 otherButtonTitles:nil];
            [tempAlert show];
        }else{
            double result = [strFirstNum doubleValue]/[strSecondNum doubleValue];
            self.ResultTextField.text = [NSStringstringWithFormat:@%f,result];
        }
    }

 

上面代碼確實可以實現這個功能,但是我們卻沒有考慮到:如果以後需要提供開平方運算,乘方運算擴展時候,改如何做呢?直接加個if else?如果加入了100種運算呢?如果這樣去做是不是每次都要去改這部分代碼,這樣有悖我們可擴展性原則。所以我們需要引入簡單工廠模式,把運算給抽象出來,並且加入運算工廠用於接收用戶的操作,簡單工廠方法代碼:

UML圖:

\

操作方法協議接口:

 

 

#import 

/*!
 *  操作方法協議接口
 *
 *  @since V1.0
 */
@protocol OperationProtocol 

-(double)getResult;

@end

 

操作方法父類:

 

#import 
#import OperationProtocol.h

/*!
 *  操作方法父類
 *
 *  @since V1.0
 */
@interface Operation : NSObject

@property double firstNum;//第一個操作數
@property double secondNum;//第二個操作數

@end

 

加法實現類:

 

 

#import Operation.h

/*!
 *  加法實現類
 *
 *  @since V1.0
 */
@interface OperationAdd : Operation

@end

 

操作工廠類:

 

 

#import 
#import Operation.h
#import OperationAdd.h
#import OperationSub.h
#import OperationMultiply.h
#import OperationDivide.h

/*!
 *  操作工廠類
 *
 *  @since V1.0
 */
@interface OperationFactory : NSObject

//獲得操作對象
+(Operation*)createOperate:(NSString*)operateStr;

@end

 

客戶端代碼:

 

 

- (IBAction)clickingOperation:(id)sender {
    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]];
    
}

 

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

3 結語

以上是所有內容,希望對大家有所幫助。

詳細代碼下載地址:

重構前:http://download.csdn.net/detail/u010013695/6944273

重構後:http://download.csdn.net/detail/u010013695/6944291

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