桥接模式的定义:
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(); } }