1.開閉原則:
一個模塊的修改较性,對拓展開放而對修改關(guān)閉道批。
舉個例子:有一個類在項目中很多地方被使用了,但是由于需求寂殉,想對這個類進行拓展,這里可以使用繼承拓展出子類喝峦,可以對子類進行修改扔傅,盡量不要修改原來的類。
2.里氏代換原則:
子類父類可以替換乃沙,子類可以使用父類所有的方法,父類可以使用子類所有的方法诗舰。
舉個例子:有多個子類繼承了父類警儒,并且實現(xiàn)了父類的抽象方法(雖然OC中沒有抽象方法或者是虛函數(shù)這個概念,但是父類方法不實現(xiàn)眶根,就模擬了沒有具體實現(xiàn)的抽象方法或者叫虛函數(shù))蜀铲,在用父類創(chuàng)建實例的時候,聲明可以用父類属百,創(chuàng)建實例可以用父類记劝,也可以用其子類,這樣诸老,所調(diào)用的方法就會自動切換到相應(yīng)的實例的方法隆夯。這個就是里氏代換原則,和面向?qū)ο蟮亩鄳B(tài)類似别伏。
3.依賴倒轉(zhuǎn)原則:
抽象不依賴于細節(jié)蹄衷,細節(jié)依賴于抽象。(這個指的是接口)
舉個例子:一個類的接口方法或者是繼承得來的抽象方法厘肮,需要通過[self …]調(diào)用所在類的自己的具體的方法愧口,這個方法是私有的方法,并不會對外開放的类茂。在OC中耍属,只要這個具體的方法沒有寫在.h文件中,就不會被外部使用巩检,也可以降低看代碼的干擾厚骗。如果把這個具體的方法寫在.h文件中,也就是暴露出來了兢哭,這樣會破壞封裝性领舰,而且會直接影響里氏代換原則的操作。而且如果某一個類繼承這個類,又會造成額外的差異冲秽。我們盡量要做到舍咖,抽象的方法(比如這里是接口的方法)用具體實現(xiàn)的方法來實現(xiàn),但是這個具體實現(xiàn)的方法不應(yīng)該暴露出來锉桑,這就叫做抽象不依賴細節(jié)排霉,細節(jié)依賴于抽象。
4.接口隔離原則:
一些接口盡量只做必要的事情民轴,而不要做太多和這個接口無關(guān)的事情攻柠。嚴格遵守會讓源碼復(fù)用性很高。
舉個例子:不要讓接口做一些超出它范圍的沒用的事情杉武。
5.合成/聚合復(fù)用
如果從一個類擴展出另外一個方法辙诞,盡量不要使用繼承辙售,而是要使用組合轻抱。
舉個例子:如果原來的一個類已經(jīng)滿足不了需求了,需要添加方法旦部,一般來說祈搜,可以用繼承,如果不到萬不得已士八,最好不用這么做容燕,其實可以將這個類當作一個組件在新建的一個類中來使用,然后這個新建的類婚度,可以多建立幾個滿足需求的方法蘸秘。在這里,新的類就相當于一個容器的作用蝗茁。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者