天天看點

iOS:個人淺談工廠模式一、什麼是工廠方法?

正式的解釋是:在基類中定義建立對象的一個接口,讓子類決定執行個體化哪個類。工廠方法讓一個類的執行個體化延遲到子類中進行。工廠方法要解決的問題是對象的建立時機,它提供了一種擴充的政策,很好地符合了開放封閉原則。工廠方法也叫做虛構造器(Virtual Constructor)。

個人的拙見是:通過工廠方法建立工廠對象,然後在工廠類中定義建立基類的子類對象的方法并通過外部傳入的條件判斷去建立哪一個子類對象,不過由于OC是運作時語言,是以工廠類雖然提供了建立子類對象的方法,但是在編譯時期并不能确定對象類型,編譯時期建立的子類對象類型是基類類型,真正的類型在運作時期由子類來确定,也即此時确定為子類類型。

(1)存在繼承關系

(2)運用了多态的特性

優點:極大地優化了代碼,如果需要100個子類對象,不用再一直調用alloc方法去建立,而是直接通過其工廠類的一句代碼即可實作,提高了對代碼的複用性。同時,也可以将大量的操作放到工廠類中去處理,業務類中隻負責去調用建立需要的對象即可。

缺點:因為它的實作條件之一必須存在繼承關系,是以模式中工廠類集中了所有的建立邏輯,形成一個龐大的全能類,當所有的類不是繼承自同一個父類的時候擴充比較困難。

工廠類:PersonFactory

iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?

基類:Person(裡面提供的方法都被子類重寫)

iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?

子類教師類:Teacher(重寫基類方法的同時,也可以定義屬于自己的新的方法)

iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?

子類學生類:Student(重寫基類方法的同時,也可以定義屬于自己的新的方法)

iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?

main.m示範如下:

iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?

列印結果:

iOS:個人淺談工廠模式一、什麼是工廠方法?
iOS:個人淺談工廠模式一、什麼是工廠方法?

本人原創,此處是自己對知識的回爐,如果了解有誤,請大家不吝賜教,對我進行斧正。

程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!

本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/6216246.html,如需轉載請自行聯系原作者

繼續閱讀