概述
- 意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化
- 适用场景:某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,则可以使用桥接模式
实现
以一个人做运动的例子进行说明,其中人和运动为可变唯独:人可分为男人、女人,运动可分为游泳、跑步
// 运动抽象
public interface Sport {
String doSport();
}
// 游泳,具体运动
public class Swimming implements Sport {
@Override
public String doSport() {
return "swimming";
}
}
// 跑步,具体运动
class Running implements Sport {
@Override
public String doSport() {
return "running";
}
}
// 人的抽象
public abstract class Person {
private Sport sport;
public Sport getSport() {
return sport;
}
public void setSport(Sport sport) {
this.sport = sport;
}
public abstract void sport();
}
// 男人
public class Man extends Person {
@Override
public void sport() {
System.out.println("Man is " + getSport().doSport());
}
}
// 女人
class Woman extends Person {
@Override
public void sport() {
System.out.println("Woman is " + getSport().doSport());
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Sport swim = new Swimming();
Sport run = new Running();
// 男人进行游泳和跑步
Person man = new Man();
man.setSport(swim);
man.sport();
man.setSport(run);
man.sport();
// 女人进行游泳和跑步
Person woman = new Woman();
woman.setSport(swim);
woman.sport();
woman.setSport(run);
woman.sport();
}
}
通过桥接模式通过组合关系代替继承,使得人和运动只依赖其抽象而非具体实现,从而使两个可变维度可以独立的变换
实际应用
java.util.logging.Handler和java.util.logging.Formatter