简介
桥接模式:将抽象与实现相分离,使他们可以独立变化。
角色
抽象化(Abstraction)角色: 该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现,抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象);
修正抽象(RefinedAbstraction)角色: Abstraction 的具体实现,对Abstraction 的方法进行完善和扩展;
实现化(Implementor)角色: 确定实现维度的基本操作,提供给 Abstraction使用。该类一般为接口或者抽象类;个人理解实现就是行为。
具体实现(ConcreteImplementor)角色: Implementor 的具体实现;
案例
现在将实现一个人的职业(抽象)和爱好(实现)的系统。
爱好的接口以及实现:
interface Hobby{
void doSth();
}
class ReadBook implements Hobby{
@Override
public void doSth() {
System.out.println("我喜欢看书");
}
}
class BasketBall implements Hobby{
@Override
public void doSth() {
System.out.println("我喜欢打篮球");
}
}
职业的抽象类和实现:
抽象类中聚合了Hobby以供继承了抽象类的子类使用。
public abstract class People {
Hobby hobby;//聚合
public People(Hobby hobby) {
this.hobby = hobby;
}
public abstract void doHobby();
}
class Scientist extends People{
public Scientist(Hobby hobby) {
super(hobby);
}
@Override
public void doHobby() {
super.hobby.doSth();
}
}
class Teacher extends People{
public Teacher(Hobby hobby) {
super(hobby);
}
@Override
public void doHobby() {
super.hobby.doSth();
}
}
这样,人的职业(抽象)与爱好(实现)完全解耦。扩展时仅需要改变客户端(main)中的new对象就能改变抽象/行为。
测试方法:
public static void main(String[] args) {
Scientist scientist = new Scientist(new BasketBall());
scientist.doHobby();
Teacher teacher = new Teacher(new ReadBook());
teacher.doHobby();
}