文章目錄
橋接模式
1.多層繼承結構
1.1擴充性問題
1.2違反單一職責原則
2.橋接模式實作
2.1場景分析
2.2橋接模式核心要點:
3.代碼實作
4.橋接模式總結
本文介紹下Java設計模式中的橋接模式
橋接模式
1.多層繼承結構
在現實生活中比如商城中以電腦為例來說,如何處理電腦銷售分類的問題,我們可以使用多層繼承結構實作這種場景
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yYidDZiJjZ1Y2Y0QTYiFWO5UGN0MjZwYDOzcTNjBzMz8CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
問題
1.1擴充性問題
1>. 如果要增加一個新的擴充類型:智能手機,則要在每個品牌下增加一個新類
2>. 如果要新增加一個品牌,則這個品牌下要增加各個類型的電腦
1.2違反單一職責原則
一個類有兩個引起該類變化的因素。
2.橋接模式實作
2.1場景分析
商城系統中常見的商品分類,以電腦為類,如何良好的處理商品分類銷售的問題?
這個場景中有兩個變化的次元:電腦類型、電腦品牌 這個場景中有兩個變化的次元:電腦類型、電腦品牌
2.2橋接模式核心要點:
處理多層繼承結構,處理多元度變化的場景,将各個次元設計成獨立的繼承結構,使各個次元可以獨立的擴充在抽象層建立關聯。
3.代碼實作
品牌類
/**
* 品牌
* @author Administrator
*
*/
public interface Brand {
void sale();
}
class Lenovo implements Brand {
@Override
public void sale() {
System.out.println("銷售聯想電腦");
}
}
class Dell implements Brand {
@Override
public void sale() {
System.out.println("銷售Dell電腦");
}
}
class Shenzhou implements Brand {
@Override
public void sale() {
System.out.println("銷售神舟電腦");
}
}
電腦次元,也就是橋接類
/**
* 電腦類型的次元
* @author Administrator
*
*/
public class Computer2 {
protected Brand brand;
public Computer2(Brand b) {
this.brand = b;
}
public void sale(){
brand.sale();
}
}
class Desktop2 extends Computer2 {
public Desktop2(Brand b) {
super(b);
}
@Override
public void sale() {
super.sale();
System.out.println("銷售桌上型電腦");
}
}
class Laptop2 extends Computer2 {
public Laptop2(Brand b) {
super(b);
}
@Override
public void sale() {
super.sale();
System.out.println("銷售筆記本");
}
}
測試類
public class Client {
public static void main(String[] args) {
//銷售聯想的筆記本電腦
Computer2 c = new Laptop2(new Lenovo());
c.sale();
//銷售神舟的桌上型電腦
Computer2 c2 = new Desktop2(new Shenzhou());
c2.sale();
}
}
4.橋接模式總結
橋接模式可以取代多層繼承的方案。 多層繼承違背了單一職責原則,複用性較差,類的個數也非常多。橋接模式可以極大的減少子類的個數,進而降低管理和維護的成本。
橋接模式極大的提高了系統可擴充性,在兩個變化次元中任意擴充一個次元,都不需要修改原有的系統,符合開閉原則。