设计模式 – 桥接模式(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的手机

--运行手机通讯录!

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