定義
- 將類的功能層次結構與實現層次結構分離。
- 功能層次結構:
– 當我們需要新增加一個功能時,通常我們會新增一個子類,當還需要增加功能,我們在現在子類上增加一個子類,這種繼承樹的延伸稱作類的功能層次結構。
- 實現層次結構:
– 當功能相似時,我們會基於抽象層新增一個實現類,當還有相似時,我們會繼續增加新的實現,這種橫向增加新的實現類稱作類的實現層次結構。
使用場景,
- 將類的功能層次結構和類的實現層次結構分離開來。
- 舉例:如手機,最開始只能夠打電話,照相(像素),不同大小,當需要新增功能(短信、郵件)時,新增實現類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 接口。