UML类图
使用场景
当业务在两个维度上变化,则可使用桥接模式。桥接模式将业务的抽象部分和实现部分分离。例如,如上图所示, 对于不同的图形我们希望用不同的画笔来画,我们如果将画笔直接写到图形中,如在直线类中需要添加用铅笔画和用毛笔画两种不同的方法,同样的在圆形中和在长方形中也是如此,组合后得到6个不同的类。而如果再增加一个用水彩笔画,又需要增加3个不同的方法,这样导致代码规模呈2的平方项增长。
代码实现
public abstract class Abstraction {
protected Implementor impl;
protected String attribute;
public void setImpl(Implementor impl){
this.impl = impl;
}
public void setAttribute(String attribute){
this.attribute = attribute;
}
public abstract void operation();
}
public interface Implementor {
public void operationImpl(String str);
}
public class RefinedAbstraction extends Abstraction {
@Override
public void operation() {
this.impl.operationImpl(attribute);
}
}
public class ConcreteImplementorA implements Implementor{
@Override
public void operationImpl(String str) {
System.out.println("A" + str);
}
}
public class ConcreteImplementorB implements Implementor{
@Override
public void operationImpl(String str) {
System.out.println("B" + str);
}
}
public class Client {
public static void main(String[] args) {
Abstraction abstraction = new RefinedAbstraction();
abstraction.setAttribute("www");
Implementor impl = new ConcreteImplementorA();
abstraction.setImpl(impl);
abstraction.operation();
Implementor impl2 = new ConcreteImplementorB();
abstraction.setImpl(impl2);
abstraction.operation();
}
}