面向對象設計原則

面向對象設計原則:
他們不是孤立存在的,他們相互依賴,相互補充!
1.單一職責原則:類的職責要單一,不能將太多的職責放在一個類中
2.開閉原則: 軟件實體對擴展是開放的,對修改是關閉的,即不修改源代碼的情況下可以進行擴展
3.里氏代換原則:一個可以接受基類對象的地方必然可以接受一個子類對象
4.依賴倒轉原則: 要針對抽象層編程,而不要針對具體類編程
5.接口隔離原則: 使用多個專門的接口,來取代一個統一的接口
6.合成複用原則: 在系統中應該儘量多使用組合和聚合關聯關係,儘量甚至不使用繼承關係
7.迪米特法則: 一個軟件實體對其他實體的引用越少越好,或者說如果兩個類不必彼此直接通信
                         那麼這兩個類就不應當發生直接的相互作用,而是通過引入一個第三者發生間接交互!


一:單一職責原則定義:
一個對象應該只包含單一的職責,並且該職責被完整的封裝在一個類中
另一種定義:就一個類而言,應該僅有一個引起它變化的原因!

單一職責原則分析:
1.一個類(或者大到模塊,小到方法)承擔的職責越多,它被複用的可能性就越小
而且如果一個類承擔的職責越多,它就相當於將這些職責
耦合在了一起,當其中一個職責變化時,可能會影響其他職責的運作 !

2.單一職責原則是實現高內聚,低耦合的指導方針,它是最簡單
但又難運用的原則,需要設計人員發現類的不同職責並將其分離!


二:開閉原則定義
開閉原則分析:
    抽象化是開閉原則的關鍵

三:里氏代換原則定義:
所有引用基類的地方必須透明的使用其子類對象!
里氏代換原則分析:
            在軟件中如果能夠使用基類對象,那麼一定可以使用其子類對象
            把基類替換成子類程序不會產生任何異常,反過來則不成立
            比如:我喜歡動物,那麼我一定喜歡狗,這是正確的 
                       我喜歡狗,那麼我一定喜歡動物嗎,不一定動物還包括貓,可能我不喜歡貓!

            里氏代換原則是實現開閉原則的重要方式之一:
            由於使用基類的地方都可以使用子類,因爲在程序中
            儘量使用基類類型來對對象進行定義,而在運行時在確定其子類類型(多態!)


四:依賴倒轉原則定義
定義1:高層模塊不應該依賴底層模塊,他們應該依賴抽象,抽象不應該依賴細節,細節應該依賴抽象
定義2:要針對接口編程,不要針對實現編程!
依賴倒轉原則分析
簡單來說就是要針對抽象類或接口編程,而不是針對具體類編程!
依賴倒轉原則的常用實現方式之一是在代碼中使用抽象類,而將具體類放在配置文件中!

依賴注入:
構造注入:通過構造函數注入實例變量!
set注入:通過setter方法注入實例變量!
接口注入: 通過接口方法注入實例變量!

五:接口隔離原則定義
定義1:客戶端不應該依賴那些它不需要的接口[注意:在該定義中的接口指的是方法]
定義2:一旦一個接口太大,則需要將它分割成一些更細小的接口

接口隔離原則分析:
用多個專門的接口,而不是使用單一的總接口!

六:合成複用原則:
儘量使用組合/聚合關係,少用繼承

合成複用原則分析 
1.在面向對象設計中,可以通過兩種基本方法複用已有的設計和實現
即通過組合/聚合關係 或者 通過繼承

繼承複用:實現簡單,易於擴展,破壞系統的封裝性,從基類
繼承而來的實現是靜態的,不可能在運行時發生改變,沒有足夠的
靈活性

組合/聚合複用:耦合度相對較低,選擇性調用成員對象的操作,可以在運行時動態進行

七:迪米特法則定義
定義1:不要和“陌生人說話”
定義2:只與你的直接朋友通信

參考博客:https://blog.csdn.net/LoveLion/article/details/7862349?utm_source=app

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章