耦合就是兩個層之間有依賴關系?
==
同一個層也可能有依賴關系
看見有解耦的方法就是在相互依賴的兩層之間加一層,可是新加的一層不是又和原來的兩層有耦合關系了嗎?
==
解耦的方式是讓設計依賴於抽象,而不是依賴於實現,看看設計模式的原則
到底什么是耦合??
==
A明確地使用B資源
publci class A { B b; } public class B { }
現在A依賴於B
interface IX { ... } public class A { IX i; public A(IX i) { this.i = i; } } public class B:IX { }
調用的時候,我可以決定用哪個實現接口的類,甚至可以是從配置文件反射生成
A a = new A(new B());
也可能因為某個條件
A a = new A(new C());
這樣 A依賴的是抽象的接口IX,而不是具體的類B或者C
追問
恕小弟愚昧,弱弱的問下,這里所說的“依賴抽象的接口不依賴現實”,是不是說不管類B,類C編譯的版本怎么變,但始終可以調用接口來調用類B,類C,所以類A不用編譯了?
回答
1. 如果B發生了修改,那我們可以使用C,因為我們依賴的是接口,而不是具體的類(對象)
打個比方,汽車制造者可以依賴於輪胎這個抽象的東西,但不能依賴於具體的品牌比如"風神輪胎"
2. 當需求改變的時候,我們需要修改的只有Main函數所在的類(甚至它都可能不用修改,只需要修改配置文件就可以)。
重新編譯程序的代價很大,打個比方,windows有更新了,只是提供補丁,而不是給一版新的windows吧
軟件設計程序的基本思想是,當需求改變的時候,我們的應用程序改變最小