桥接模式

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

}