[Java] 完全解耦
阿新 • • 發佈:2019-01-07
今天在看Thinking in Java的時候 遇上的小問題 查了一些資料 做一個小整理。
先說 耦合性 耦合性就是對 物件的依賴程度。依賴程度高 叫做高耦合,依賴程度低叫做低耦合。我們可以通過Java自帶的介面和Spring的IOC來降低程式的耦合性,也是好的程式所追求的。
舉個例子,一個程式需要一種水果,你可以傳蘋果,橘子什麼的進去。這叫低耦合。
一個程式只需要蘋果,你穿橘子進去是錯的,這叫高耦合。
然後來講接耦。這裡主要講介面卡設定模式。
介面卡設定模式 通過代理的方式 在自己的類中創造方法呼叫傳入引數的方法。
下面看程式碼
//很普通的一個類 作為基類
package Interface;
public class filter {
public String name(){
return getClass().getSimpleName();//返回類姓名
}
public String process(String s){
return s;
}
}
//繼承filter的filter1
package Interface;
public class filter1 extends filter {
public filter1(){
System.out.println("I am filter1" );
}
}
//繼承filter的filter2
package Interface;
public class filter2 extends filter{
public filter2(){
System.out.println("I am filter2");
}
}
filter1 和 filter2是帶回傳給我們介面卡的引數 來體現出低耦合性用的。
//一個藉口 用來給介面卡implements用的
package Interface;
public interface processer {
public Object process (Object item);
}
//介面卡 可以看出 我們沒有直接粗暴地使用f.process()用在main函式裡
package Interface;
public class filterapdapter implements processer {
filter f;
public filterapdapter(filter f){
this.f = f;
}
public String process(Object item){
return f.process((String)item);
}
}
//main
package Interface;
public class coupling {
static void process(processer p,String s){
System.out.println(p.process(s));
}
public static void main(String argv[]){
String s = "test";
process(new filterapdapter(new filter1()),s);
process(new filterapdapter(new filter2()),s);
}
}
從coupling.java中 我們就可以看出 coupling.process()需要呼叫一個implements藉口 這個我們通過 介面卡 傳入 然後 再通過介面卡 呼叫我們需要的filter.process()
我們可以把filter1 和 filter2 傳參 傳進去 體現了 低耦合 。
同時可見 這裡的filter並沒有與Interface發生聯絡 而是 巧妙地通過一個filteradapt介面卡產生了一個嫁接的橋樑
當然有一種更簡單的方法 就是強行把filter1,filter2 implements Interface 也能產生相同的效果
介面卡設計模式 不過是 基於你遇上了無法修改的程式碼時 做出的選擇。