定义
- 将类的功能层次结构与实现层次结构分离。
- 功能层次结构:
– 当我们需要新增加一个功能时,通常我们会新增一个子类,当还需要增加功能,我们在现在子类上增加一个子类,这种继承树的延伸称作类的功能层次结构。 - 实现层次结构:
– 当功能相似时,我们会基于抽象层新增一个实现类,当还有相似时,我们会继续增加新的实现,这种横向增加新的实现类称作类的实现层次结构。
使用场景,
- 将类的功能层次结构和类的实现层次结构分离开来。
- 举例:如手机,最开始只能够打电话,照相(像素),不同大小,当需要新增功能(短信、邮件)时,新增实现类MiPhone;不同型号的手机有不同的像素和大小等特点,只需在右边添加新的实现,在手机抽象层中聚合了Feature。
UML图

代码实现
public class Phone {
private Feature bridge;
public Phone(Feature bridge) {
this.bridge = bridge;
}
public void call(){
System.out.println("打电话");
}
public int pixel(){
return bridge.pixel();
}
public int size(){
return bridge.size();
}
}
public interface Feature {
public int pixel();
public int size();
}
public class MiPhone extends Phone {
public MiPhone(Feature bridge) {
super(bridge);
}
public void message(){
System.out.println("发送短信");
}
public void email(){
System.out.println("发送邮件");
}
}
public class FeatureImpl implements Feature {
@Override
public int pixel() {
return 5000000;
}
@Override
public int size() {
return 80;
}
}
public class Client {
public static void main(String[] args) {
MiPhone miPhone = new MiPhone(new FeatureImpl());
miPhone.email();
int size = miPhone.size();
int pixel = miPhone.pixel();
}
}
总结
- 将类的功能层次结构与实现层次结构分离。
- 使用继承来达到功能层次结构;使用接口实现来达到实现层次结构;使用聚合将两者关联。
- 符合开闭原则,易于扩展。
- 符合依赖倒转原则:依赖于 Feature 接口。