最近在看關於設計模式的書籍,開始覺得在設計程式架構之時,能夠靈活運用這些設計模式,**將變得非常具有美感。乙個好的設計模式使得程式更加的靈活,容易修改,易於使用。
從最簡單的簡單工廠模式開始學起,舉乙個實現計算器的例子,來完成簡單工廠模式。
乙個簡單計算器,用四則運算來考慮的話,加減乘除,那麼初學者會覺得很簡單,用if條件來進行判斷,判斷好了之後就可以完成要求,而稍微有經驗點的 可能會選擇switch case的判斷方式,例如下面的**:
operation運算方法的邏輯
- (void)operationwithnumbera:(double )numbera withoperator:(char)operator withnumberb:(double )numberb
else
case
'e':
nslog(@"退出");
break;
default:
break;
}
而客戶端方面的** 我們可以這麼寫
/**
* 四則運算
*/- (void)operation
在我們得到需要的數值之後,呼叫運算方法做判斷,算出結果。
這樣寫就會比if的判斷清晰,因為我們已經把業務邏輯和介面顯示的部分完全分離了,在任何需要用到的地方,我們就可以直接複製這段**,完成運算。
但是假如,我有一天的運算需求不滿足於四則運算,而是希望加上開根號或者平方的運算方法,該怎麼辦。難道我們還要回頭,去switch語句裡再加判斷條件,之後在介面上增加提示麼?
之前的**,我們只用到了物件導向的三個特性之一,就是封裝,而解決我上一段話提出的疑問,我們可以用到另外兩個特性,多型和繼承來實現。
為了實現之前的要求,在不改動其他**的情況下,能夠增加更多的運算方法,或者修改出問題的運算方法。那麼我們首先先把四則運算,封裝成四個類,即為加法類、減法類、乘法類、除法類。
@implementation
addoperation
/** * 加法
*/+ (double)addoperationwithnumbera:(double)numbera withnumberb:(double)numberb
@implementation
suboperation
/** * 減法
*/+ (double)suboperationwithnumbera:(double)numbera withnumberb:(double)numberb
@implementation
muloperation
/** * 乘法
*/+ (double)muloperationwithnumbera:(double)numbera withnumberb:(double)numberb
@implementation
divoperation
/** * 除法
*/+ (double)divoperationwithnumbera:(double)numbera withnumberb:(double)numberb
else
nslog(@"%f",result);
return result;
}
這樣我們就已經把四則運算,封裝成了四個類。因為偷懶,我並沒有設計介面模型,只是把結果輸出來,所以每段輸出結果的nslog請不要介意。
接下來,我們在簡單工廠的operation類中,把呼叫這四個類的運算方法實現。
/**
* 封裝了乙個運算方法
* * @param numbera 數字a
* @param operator 運算子
* @param numberb 數字b
*/+ (void)operationwithnumbera:(double )numbera withoperator:(char)operator withnumberb:(double )numberb
}
以上就是在簡單工廠的類中,呼叫四個運算方法的類,來實現運算,並且成功解耦合,有利於以後的維護和擴充套件。客戶端方面的**也就非常簡單。
/**
* 四則運算
*/- (void)operation
客戶端的**還是偷懶,沒有設計ui部分,所以也直接把資料代入進去了,但是大體的思路就是這樣。直接用物件導向的三大特性來解決問題,在設計**時,一定要本著可維護、可復用、可擴充套件、靈活性好的設計思路來設計。尤其要注意,這裡的可復用,可不是可複製哦。今天的學習筆記就寫到這裡。 iOS設計模式之簡單工廠模式
乙個簡單計算器,用四則運算來考慮的話,加減乘除,那麼初學者會覺得很簡單,用if條件來進行判斷,判斷好了之後就可以完成要求,而稍微有經驗點的 可能會選擇switch case的判斷方式,例如下面的 operation運算方法的邏輯 void operationwithnumbera double nu...
iOS設計模式之簡單工廠模式
工廠方法 factorymethod 模式的定義 定義乙個建立產品物件的工廠介面,將產品物件的實際建立工作推遲到具體子工廠類當中。這滿足建立型模式中所要求的 建立與使用相分離 的特點。如果要建立的產品不多,只要乙個工廠類就可以完成,這種模式叫 簡單工廠模式 它不屬於 gof 的 23 種經典設計模式...
iOS 設計模式之工廠模式
ios 工廠模式我的理解是 他就是為了建立物件的 建立物件的時候,我們一般是alloc乙個物件,如果需要建立100個這樣的物件,如果是在乙個for迴圈中還好說,直接一句alloc就行了,但是事實並不那麼如意,我們可能會在不同的地方去建立這個物件,那麼我們可能需要寫100句alloc 了,但是如果我們...