1. 程式人生 > >[Java] 完全解耦

[Java] 完全解耦

今天在看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 也能產生相同的效果

介面卡設計模式 不過是 基於你遇上了無法修改的程式碼時 做出的選擇。