由於設計模式學習中需要配合uml圖,所以先學習下uml的常用方法uml結構類圖的常用畫法
demo傳送門
案例:有蘋果,華為,三星三種電子產品供外界使用
這裡我們採用面向協議程式設計的方式,也可以用繼承方式,這裡推薦面向協議
協議裡面先規定了乙個方法- (void)createproduct;
,上面的列舉先不看,後面使用簡單工廠的時候會用到
這裡只貼出一種,其餘兩種處理方式一樣
鑑於普通方法下的劣勢很容易就能看到,客戶不但知道了介面,而且也知道了具體有誰去實現,介面的思想是"封裝隔離",實現類應該是被介面隔離開的,也就是我們最好只知道id
但是不知道具體是誰[[iphoneproduct alloc] init]
顯然我們是知道具體產品的
那麼如果想要在不知道具體產品的情況下就能實現介面,該如何實現呢?下面簡單講述一下簡單工廠的設計理念
在開始用簡單工廠實現上述案例之前,先來認識一下什麼叫簡單工廠
1.簡單工廠的定義:提供乙個建立物件例項的功能,而無需關心其具體實現。被建立例項的型別可以使介面,抽象類或者具體的類。
簡而言之,外界不知道乙個工廠裡面到底要生成什麼樣的例項物件,只需要傳入乙個標識,工廠內部自己就能生產對應的產品,工廠內部是知道具體產品的實現的,最後只需要返回給客戶端乙個遵循協議的物件即可,客戶端拿到這個物件就能直接訪問介面協議方法,而不需要關心具體的實現。
下面以乙個uml結構圖簡單展示下簡單工廠的結構圖:
下面說明一下各個角色的功能和作用
介面協議定製
具體實現類
huaweiproduct,sanxingproduct類似
工廠類:
客戶端實現:
通過上述**可以看出,客戶端是不知道介面的具體實現的,和具體實現類接觸的類變成了工廠類,我們可以這麼理解,工廠類,介面類和具體實現類作為乙個封裝體,暴露給外界的只是工廠類的乙個類方法和介面類
後續如果需要再加另外的具體實現類,只需要新增實現類並在工廠類新增乙個判斷條件即可
大致實現思路就是這樣,總的概括來說,簡單工廠的本質就是選擇性地去建立具體產品(實現類),工廠裡面主要就是選擇性建立,而實現的難點在於如何選擇性建立,我這裡著重講述的是從客戶端傳遞引數的方式。對於何時選用簡單工廠,可以從以下兩個方面考慮:
優點
缺點
簡單工廠模式和工廠模式
在對比兩種模式之前,首先需要學習 開放 封閉原則。在以前學習的過程中,聽說過很多次,編寫程式要遵循開閉原則。在做專案的過程中,因為需求的新增,經常會更新軟體。更新軟體,就要設計到修改 了。在物件導向的程式設計中,經常會寫類。如果因為新增需求,去修改已經完成的類。那麼他是不符合開閉原則的。新增需求,應...
簡單工廠和工廠模式
工廠模式 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使乙個類的例項化延遲到其子類。適用性當乙個類不知道它所必須建立的物件的類的時候。當乙個類希望由它的子類來指定它所建立的物件的時候。當類將建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將哪乙個幫助子類是...
簡單工廠和工廠模式
設計模式泛泛談 想要實現依賴倒轉規則,工廠方法不是唯一的技巧。工廠模式或者抽象工廠應該是重構時使用的。怎麼感覺有點 fp 中的高階函式的味道!簡單工廠和工廠模式的區別 區別其實不大。但是工廠模式能對修改閉合,以前的 保證不會出問題。不會出現新增的功能測試沒問題,已有的功能莫名其妙就掛掉的情況。所以真...