1、OO設計基礎java
一、封裝編程
二、繼承編碼
三、多態spa
四、抽象設計
2、OO設計原則code
一、找出應用中須要變化之處,讓它們獨立出來,不要和那些不須要變化的代碼混在一處。對象
二、針對接口編程,而不是針對實現編程。繼承
針對接口編程,即「針對超類型編程」。針對接口編程,關鍵就在於多態。利用多態,程序能夠針對超類型編程,不會被綁死在超類型的行爲上。接口
示例:有一個抽象類Animal,有兩個具體的實現(Dog與Cat)繼承Animal。get
針對實現編程:
Dog d = new Dog(); d.bark();
針對接口/超類型編程:
Animal a = new Dog(); a.makeSound();
更進一步,子類實例化的動做再也不須要在代碼中硬編碼,而是在運行時才指定具體的對象:
a = getAnimal(); a.makeSound();
三、多用組合,少用繼承。
四、爲了交互對象之間的鬆耦合設計而努力。
五、開放-關閉原則:類應該對擴展開放,對修改關閉。
應用該原則時,應該把注意力集中在設計中最有可能改變的地方,而後應用開放-關閉原則。
六、依賴倒置原則
要依賴抽象,不要依賴具體類。
這個原則看上去很像「針對接口編程,而不是針對實現編程」,然而這裏更強調抽象。這個原則說明了:不能讓高層組件依賴低層組件,並且無論是高層仍是低層組件,二者都應該依賴於抽象。所謂「高層」組件,是由其餘低層組件定義其行爲的類。例如,PizzaStore是個高層組件,由於它的行爲是由比薩定義的:Pizza建立全部不一樣的比薩對象,準備、烘烤、切片、裝盒;而比薩自己屬於低層組件。
下面的指導方針,能幫助咱們避免在OO設計中違反依賴倒置原則:
1⃣️ 變量不能夠持有具體類的引用。若是使用new,就會持有具體類的引用。你能夠改用工廠來避開這樣的作法。
2⃣️ 不要讓類派生自具體類。若是派生自具體類,就會依賴具體類。請派生自一個抽象(接口或抽象類)。
3⃣️ 不要覆蓋基類中已實現的方法。若是覆蓋基類已實現的方法,那麼你的基類就不是一個真正適合被繼承的抽象。基類中已實現的方法,應該由全部的子類共享。
咱們應該儘可能達到這個原則,而不是隨時都要遵循這個原則。咱們都很清楚,任何Java成勳都有違反這些指導方針的地方。
七、"最少知識" 原則
定義:最少知識原則:只和你的密友談話。
原則初衷:但願咱們在設計中,不要讓太多的類耦合在一塊兒,省得修改系統中的一部分,會影響到其餘部分。
該原則提供了一些方針:
就職何對象而言,在該對象的方法內,咱們只應該調用屬於如下範圍的方法:1⃣️ 該對象自己 2⃣️ 被看成方法的參數而傳遞進來的對象 3⃣️ 此方法所建立或實例化的任何對象 4⃣️ 對象的任 何組件
//未採用該原則 public float getTemp() { Thermometer thermometer = station.getThermometer(); return thermometer.getTemperature(); }
//採用該原則 public float getTemp() { return station.getTemperature(); }