設計模式 – 橋接模式(Bridge)

ü  核心:將抽象部分與它的實現部分分離,使他們都可以獨立地變化;

ü  結構圖:

ü  用途:當系統的實現可以按多個角度(範疇)進行分類,而每一種分類都有可能變化時,那麼就把這種多角度分離出來讓他們獨立變化,從而減少他們之間的耦合;

ü  實例:手機型號與手機軟件的組合

Ø  手機軟件抽象類 文件HandSetSoft.java

package com.yilong.bridge.handset.software;

public abstract class HandSetSoft {

    public abstract void run();

}

Ø  手機遊戲類 文件HandSetGame.java

package com.yilong.bridge.handset.software;

public class HandSetGame extends HandSetSoft {

    @Override

    public void run() {

       System.out.println("運行手機遊戲!");

    }

}

Ø  手機通訊錄類 文件HandSetConnection.java

package com.yilong.bridge.handset.software;

public class HandSetConnection extends HandSetSoft {

    @Override

    public void run() {

       System.out.println("運行手機通訊錄!");

    }

}

Ø  手機型號抽象類 文件HandSetBrand.java

package com.yilong.bridge.handset.brand;

import com.yilong.bridge.handset.software.HandSetSoft;

public abstract class HandSetBrand {

    private HandSetSoft handSetSoft;

    public HandSetBrand(HandSetSoft handSetSoft) {

       this.handSetSoft = handSetSoft;

    }

    public abstract void run();

    public HandSetSoft getHandSetSoft() {

       return handSetSoft;

    }

    public void setHandSetSoft(HandSetSoft handSetSoft) {

       this.handSetSoft = handSetSoft;

    }

}

Ø  手機型號M 文件HandSetBrandM.java

package com.yilong.bridge.handset.brand;

import com.yilong.bridge.handset.software.HandSetSoft;

public class HandSetBrandM extends HandSetBrand {

    public HandSetBrandM(HandSetSoft handSetSoft) {

       super(handSetSoft);

    }

    @Override

    public void run() {

       System.out.println("運行品牌爲M的手機!");

       if(this.getHandSetSoft() != null) {

           System.out.print("--");

           this.getHandSetSoft().run();

       }

    }

}

Ø  手機型號N – HandSetBrandN.java

package com.yilong.bridge.handset.brand;

import com.yilong.bridge.handset.software.HandSetSoft;

public class HandSetBrandN extends HandSetBrand {

    public HandSetBrandN(HandSetSoft handSetSoft) {

       super(handSetSoft);

    }

    @Override

    public void run() {

       System.out.println("運行品牌爲N的手機");

       if(this.getHandSetSoft() != null) {

           System.out.print("--");

           this.getHandSetSoft().run();

       }

    }

}

Ø  測試類 文件Main.java

package com.yilong.bridge.handset.test;

import com.yilong.bridge.handset.brand.HandSetBrandM;

import com.yilong.bridge.handset.brand.HandSetBrandN;

import com.yilong.bridge.handset.software.HandSetConnection;

import com.yilong.bridge.handset.software.HandSetGame;

public class Main {

    public static void main(String[] args) {

       System.out.println("-------------------------");

       HandSetBrandM handSetM = new HandSetBrandM(new HandSetGame());

       handSetM.run();

       handSetM.setHandSetSoft(new HandSetConnection());

       handSetM.run();

       System.out.println("-------------------------");

       HandSetBrandN handSetN = new HandSetBrandN(new HandSetGame());

       handSetN.run();

       handSetN.setHandSetSoft(new HandSetConnection());

       handSetN.run();

    }

}

Ø  打印結果:

-------------------------

運行品牌爲M的手機!

--運行手機遊戲!

運行品牌爲M的手機!

--運行手機通訊錄!

-------------------------

運行品牌爲N的手機

--運行手機遊戲!

運行品牌爲N的手機

--運行手機通訊錄!

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