1.單一職責原則 應(yīng)該有且只有一個原因引起類的變化。 比如說MP3,我們僅僅只讓它用來聽音樂用、照相機只是讓它來照相用,我舉MP3也好照相機也好僅僅是為了讓大家更好的理解什么是單一職責原則。在我們編程中,單一職責原則是說,一個類應(yīng)該僅有一個引起它變化的原因,也就是讓一個類實現(xiàn)的功能盡可能單一,如果我們在類的職責上分離上能盡可能的到位的話,我們的代碼才能夠做到易維護、易擴展、易復(fù)用。
2.里氏替換原則 只要父類能出現(xiàn)的地方,其子類就應(yīng)該能出現(xiàn)。也就是用子類替換父類后,保證程序照樣運行。 一個軟件實體如果使用的是一個父類的話,那么一定適用于其子類,而且它察覺不出父類對象和子類對象的區(qū)別,也就是說,在軟件里面,把父類都替換成它的子類,程序的行為沒有變化,簡單的說,子類型必須能夠替換它們的父類型。
3.依賴倒轉(zhuǎn)原則 面向接口編程。 A:高層模塊不應(yīng)該依賴低層模塊。兩個都應(yīng)該依賴抽象。 B:抽象不應(yīng)該依賴細節(jié),細節(jié)應(yīng)該依賴于抽象。也就是說,要針對接口編程,不要對實現(xiàn)編程。
4.合成/聚合復(fù)用原則(CARP) 盡量使用合成/聚合,盡量不要使用類繼承 聚合關(guān)系(Aggregation)聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的關(guān)系,此時整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個整體對象,也可以為多個整體對象共享。組合關(guān)系(Composition)組合也是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強,也稱為強聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束。接下來看一個例子 合成/聚合復(fù)用原則(CARP的好處是: 優(yōu)先使用對象的合成/聚合將有利于你保持每個類被封裝,并被集中在單個任務(wù)上。這樣類和類繼承層次會保持較小規(guī)模,并且不可能增長為不可控制的龐然大物。 5.迪米特法則 也稱為最少知識原則,其定義為:一個對象應(yīng)當對其他對象有最少的了解。也就是一個類中不要有過多的其他類。 如果兩個類不必彼此直接通信,那么這兩個類就不應(yīng)當發(fā)生直接打相互作用。如果其中一個類需要調(diào)用另一個類的某一個方法的話,可以通過第三者轉(zhuǎn)發(fā)這個調(diào)用。 強調(diào)的是在類的結(jié)構(gòu)設(shè)計上,每一個類都應(yīng)當盡量降低成員的訪問權(quán)限。其根本思想強調(diào)了類之間的松耦合。類之間的耦合越弱,越有利于復(fù)用,一個處在弱耦合的類被修改,不會對有關(guān)系的類造成波及。
6.開閉原則 一個軟件實體(如類,模塊,和函數(shù))應(yīng)該對擴展開放,對修改關(guān)閉。 開放-封閉原則表達的是兩個意思,一個是說對于擴展是開放的,另一個是說對于更改是封閉的。擴展開放是說,我們所寫的代碼應(yīng)該擁有擴展的功能,在編寫代碼時就要考慮將來擴展的可能性,因為需求隨時都可能變更,所以我們要在原有代碼的基礎(chǔ)上,進行增加功能。而更改是封閉的是說,對代碼進行需求變更是,不能對代碼中已經(jīng)存在的類、模塊、函數(shù)等進行修改,需求變更是通過增加新代碼而不是更改原有的代碼。 |
|
來自: 賈朋亮博客 > 《設(shè)計模式—原則》