1,內聚
程序=數據+操作
=數據結構+算法(PASCAL之父Nicklaus Wirth)
=對象+消息
對象是什么?
對象就是保管好自己的東西,做好自己的事情的程序模塊--------這就是內聚
2,依賴
一個對象往往需要跟其他對象打交道,既包括獲取依賴於另一對象,也包括仰賴其他對象的行為,一旦發生便稱為該對象依賴另一對象。只要有一個依賴另一個的現象發生,則這兩者之間存在耦合,比如媽媽和嬰兒。
3,耦合
耦合的程度就是耦合度,也就是雙方依賴的程度,媽媽和嬰兒之間是強耦合,而我們與快遞小哥之間為弱耦合。
4,依賴倒置
高層模塊不應該依賴底層模塊,都依賴與抽象。抽象不應該依賴於細節,細節應該依賴抽象。
舉一個例子:
假設你要買一個IPhone,賣IPhone的老板讓你拿一頭豬跟他換,可是你並沒有養豬,你只會編程。所以你找到一位養豬戶,說給他做一個養豬的APP來換他一頭豬,他說換豬可以,但是得用一條金項鏈來換——所以這里就出現了一連串的對象依賴,從而造成了嚴重的耦合災難。解決這個問題的最好的辦法就是,買賣雙發都依賴於抽象——也就是貨幣——來進行交換,這樣一來耦合度就大為降低了。
5,控制反轉
首先我們要區分兩個角色,server 跟 Client,也就是服務方和客戶方。提供服務端的一方稱為服務方,請求服務的一方稱為客戶方。
當我們使用開發框架時,開發框架就是作為服務方,而我們自己編寫的業務應用就是客戶方。當Client調用server時,這個叫做一般的控制;而當server調用Client時,就是我們所說的控制反轉,同時我們也將這個調用稱為“回調”。控制反轉跟依賴倒置都是一種編程思想,依賴倒置着眼於調用的形式,而控制反轉則着眼於程序流程的控制權。一般來說,程序的控制權屬於server,而一旦控制權交到Client,就叫控制反轉。比如你去下館子,你是Client餐館是server。你點菜,餐館負責做菜,程序流程的控制權屬於server;而如果你去自助餐廳,程序流程的控制權就轉到Client了,也就是控制反轉。
6,依賴注入
A對象依賴於B對象,等價於A對象內部存在對B對象的“調用”,而前提是A對象內部拿到了B對象的引用。B對象的引用的來源無非有以下幾種:A對象內部創建(無論是作為字段還是作為臨時變量)、構造器注入、屬性注入、方法注入。后面三種方式統稱為“依賴注入”。