基本概念
桥接模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象与实现分离是指抽象类和它的派生类用来实现自己的对象。
结构图
上图摘自《大话设计模式》
应用场景
实现系统如果可能有多角度分类,每一种分类都有可能变化,那么就把多角度分离出来让他们独立变化,减少他们之间的耦合。因为这种情况下如果只用继承,会造成大量的类增加,不能满足开放-封闭原则,因此需要考虑桥接模式。
源码示例
1.先定义一个接口
package com.spook.bridge;
/**
* 接口
*/
public interface Implementor {
public void operation();
}
2.接口的实现类A
package com.spook.bridge;
/**
* 实现类A
*/
public class ConcreteImplementorA implements Implementor {
@Override
public void operation() {
// TODO Auto-generated method stub
System.out.println("具体实现类A执行operation方法");
}
}
3.接口的实现类B
package com.spook.bridge;
/**
* 实现类B
*/
public class ConcreteImplementorB implements Implementor {
@Override
public void operation() {
// TODO Auto-generated method stub
System.out.println("具体实现类B执行operation方法");
}
}
4.定义一个抽象类
package com.spook.bridge;
/**
* 抽象类
*/
public abstract class Abstraction {
protected Implementor implementor;
public Abstraction(Implementor implementor) {
this.implementor = implementor;
}
public abstract void operation();
}
5.抽象类的实现类
package com.spook.bridge;
/**
* 抽象类的一个实现类
*/
public class RefinedAbstraction extends Abstraction {
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
@Override
public void operation() {
// TODO Auto-generated method stub
implementor.operation();
}
}
6.测试类
package com.spook.bridge;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Abstraction ab = new RefinedAbstraction(new ConcreteImplementorA());
ab.operation();
ab = new RefinedAbstraction(new ConcreteImplementorB());
ab.operation();
}
}
运行测试类输出如下内容:
具体实现类A执行operation方法
具体实现类B执行operation方法