1.UML类图
拿手机来举个例子好理解一些,Abstraction就是手机品牌,RefinedAbstraction就是某个具体的手机品牌如:三星,苹果等。Implementor就是手机软件,ConcreteImplementorA是三星手机通讯录,ConcreteImplentorB是苹果手机游戏。将手机品牌这个抽象和手机软件这个实现分离开,让它们独立变化,这样的耦合很松散。比如现在又要新增一个华为手机的通讯录实现,只需要新建一个类继承Abstraction类,新建一个华为通讯录实现类继承Implementor类,在客户端使用时,实例化一个华为手机实例,再实例化一个华为手机通讯录实例,将其设为华为手机的成员变量,在调用华为手机的相应操作即可。这样不用改动之前的任何类就可以实现新需求。
2.示例代码
抽象。
public abstract class Abstraction {
protected Implementor implementor;
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
public abstract void operation();
}
被提炼的抽象。
public class RefinedAbstraction extends Abstraction {
@Override
public void operation() {
implementor.operation();
}
}
实现。
public abstract class Implementor {
public abstract void operation();
}
具体实现。
public class ConcreteImplementorA extends Implementor {
@Override
public void operation() {
System.out.println("具体实现A的方法执行");
}
}
public class ConcreteImplementorB extends Implementor {
@Override
public void operation() {
System.out.println("具体实现B的方法执行");
}
}
客户端。
public class Client {
public static void main(String[] args) {
Abstraction abstraction = new RefinedAbstraction();
abstraction.setImplementor(new ConcreteImplementorA());
abstraction.operation();
abstraction.setImplementor(new ConcreteImplementorB());
abstraction.operation();
}
}
3.特点
桥接模式将抽象部分与它的实现部分分离,使他们都可以独立地变化。也就是实现系统有可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。