數(shù)據(jù)結(jié)構(gòu)研究的是針對具體問題的算法,設(shè)計(jì)模式是面向應(yīng)用開發(fā)的一種策略。
設(shè)計(jì)模式實(shí)際上就是編程方式和習(xí)慣,是經(jīng)驗(yàn)的總結(jié),這和生活習(xí)慣類似,如果擁有好的生活習(xí)慣,你就會(huì)很健康,在其他人眼里也會(huì)很好,而如果生活習(xí)慣不好,時(shí)間不顧慮,這當(dāng)然沒什么問題(自我感覺良好),但可能會(huì)對自己的健康和其他的方面帶來影響(有時(shí)會(huì)很大)。
設(shè)計(jì)模式也一樣,雖然不使用任何設(shè)計(jì)模式也可以寫任何的軟件,但是這就相當(dāng)于沒有好的生活習(xí)慣一樣,會(huì)給這些系統(tǒng)帶來很大的麻煩,就象一個(gè)人的煙隱很大,長期下去,得肺癌的幾率要比不吸煙的人大得多。 而使用設(shè)計(jì)模式來實(shí)現(xiàn)軟件,就相當(dāng)于擁有好的生活習(xí)慣,這樣會(huì)使整個(gè)軟件系統(tǒng)得到良性的發(fā)展。設(shè)計(jì)模式不是必須的,但擁有它使用生活變得更美好。?
設(shè)計(jì)模式后面的道理是軟件的設(shè)計(jì)原則
開閉原則 OCP(Open-Closed Principle): 對擴(kuò)展開放,對修改關(guān)閉. 抽象和接口是關(guān)鍵.
里氏代換原則 LSP(Liskov Substitution Principle):? 如果對于每一個(gè)類型為T1的對象o1,都有類型為T2的對象o2, 使得以T1定義的所有程序P在所有對象o1都代換為o2時(shí), 程序P的行為沒有變化, 那么類型T2是類型T1的子類型。反過來代換不成立。
?
依賴倒轉(zhuǎn)原則DIP(Dependence Inversion Principle): 第一種表述是,抽象不應(yīng)當(dāng)依賴與細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴與抽象;第二中表述是,要針對抽象和接口編程,不要針對實(shí)現(xiàn)編程。
接口隔離原則ISP(Interface Segregation Principle): 使用多個(gè)專門的接口比使用一個(gè)單一的總接口要好。?
合成/聚合復(fù)用原則CARP(Composite/Aggregate Resue Principle): 在一個(gè)新對象里面使用一些已經(jīng)有的對象,使之成為新對象的一部分;新的對象通過向這些對象委派達(dá)到復(fù)用已有功能的一部分。這個(gè)設(shè)計(jì)原則的另一種表述是:要盡量使用合成/聚合,而不要使用繼承。
迪米特法則LoD(Law of Demeter): 又叫做最少知識原則,就是說一個(gè)對象應(yīng)該盡量少的知道另一個(gè)對象。它的兩外幾種表述: 只與你直接的朋友通信;不要跟陌生人說話。