当实现一个操作,有抽象和实现的叠加时,用桥模式可以比较好的解决。
比如飞机分为:客机,货机,空中客车,波音
客机,货机就是一种抽象,airbus, bocing就是一种实现,两者之间有叠加,有一种排列组合的关系。如果不用设计模式进行结构的设计,代码可能就会很混乱。下面给出一个演示的例子。
抽象接口Plane
package org.bluebea.gof.bridge;
public abstract class Plane {
protected PlaneMaker planeMaker;
public Plane() {
this.planeMaker = PlaneMakerSingle.getPlaneMaker();
}
public abstract void fly();
}
说明:抽象接口中有一个实现接口对象的实现,以保证两个接口发生关系。
可以在构造抽象接口实现时,放入实现对象。但以后的子类在构造时都会有这种操作。
实现接口PlaneMaker
package org.bluebea.gof.bridge;
public abstract class PlaneMaker {
public abstract void make();
}
抽象实现PassengerPlane
package org.bluebea.gof.bridge;
public class PassengerPlane extends Plane {
public PassengerPlane() {
}
public void fly() {
planeMaker.make();
System.out.println("-- " + "PassengerPlane fly.");
}
}
抽象实现CargoPlane
package org.bluebea.gof.bridge;
public class CargoPlane extends Plane {
public CargoPlane() {
}
public void fly() {
planeMaker.make();
System.out.println("-- " + "CargoPlane fly.");
}
}
实现接口实现Bocing
package org.bluebea.gof.bridge;
public class Bocing extends PlaneMaker {
public Bocing() {
}
public void make() {
System.out.print("-- " + "Bocing");
}
}
实现接口实现Airbus
package org.bluebea.gof.bridge;
public class Airbus extends PlaneMaker {
public Airbus() {
}
public void make() {
System.out.print("-- " + "Airbus");
}
}
取得实现对象的单态类
package org.bluebea.gof.bridge;
public class PlaneMakerSingle {
private static PlaneMaker planeMaker;
public PlaneMakerSingle(PlaneMaker pm) {
planeMaker = pm;
}
public static PlaneMaker getPlaneMaker() {
return planeMaker;
}
}