橋接模式的定義:
java
將抽象與行爲區分開, 把行爲和抽象分開封裝,各自獨立能夠彼此間組合。ide
UML圖:測試
使用意圖:this
不但願抽象部分和行爲有一種固定的綁定關係,而是應該能夠動態聯繫的。spa
例子: code
有不一樣種類的鴨子,野鴨,火箭鴨,烤鴨,每種鴨子都有他們的飛行方式,這時能夠繼承Duck父類去實現父類飛行的抽象方法,試想一下 ,原來的野鴨飛行方式是靠翅膀,如今須要另外一種野鴨,它靠火箭飛行器飛行, 莫非去繼承野鴨產生新的子類? 若是再有另外一種野鴨,靠螺旋槳飛行,在建立一個野鴨的子類? 如今的問題是鴨子和飛行方式牢牢的綁在了一塊兒,沒有作到鬆耦合,這時能夠用橋接模式實現。orm
鴨子抽象類:繼承
package com.younchen.bridge; public abstract class Duck { FlyAction flyAction; public FlyAction getFlyAction() { return flyAction; } //設置飛行行爲 public void setFlyAction(FlyAction flyAction) { this.flyAction = flyAction; } //鴨子飛行方法 public abstract void doFly(); }
火箭鴨:ci
package com.younchen.bridge; public class RocketDuck extends Duck{ @Override public void doFly() { // TODO Auto-generated method stub System.out.print ("火箭鴨在飛翔:"); flyAction.flyToSky(); } }
野鴨:get
package com.younchen.bridge; public class WildDuck extends Duck{ @Override public void doFly() { // TODO Auto-generated method stub System.out.print ("野鴨在飛翔:"); flyAction.flyToSky(); } }
飛行抽象類:
package com.younchen.bridge; public abstract class FlyAction { public abstract void flyToSky(); }
火箭飛行器飛行方式:
package com.younchen.bridge; public abstract class FlyAction { public abstract void flyToSky(); }
烤翅膀飛行方式:
package com.younchen.bridge; public class WingFlyAction extends FlyAction { @Override public void flyToSky() { // TODO Auto-generated method stub System.out.println("拍打着翅膀飛翔"); } }
測試類:
package com.younchen.bridge; public class BridgeTestMain { public static void main(String[] args) { // TODO Auto-generated method stub Duck wildDuck=new WildDuck(); Duck rockDuck=new RocketDuck(); wildDuck.setFlyAction(new WingFlyAction()); rockDuck.setFlyAction(new RocketFlyAction()); wildDuck.doFly(); rockDuck.doFly(); System.out.println("-------------------------------"); wildDuck.setFlyAction(new RocketFlyAction()); rockDuck.setFlyAction(new WingFlyAction()); wildDuck.doFly(); rockDuck.doFly(); } }