一、優(yōu)點(diǎn):
1. 將抽象部份與它的實(shí)現(xiàn)部份分離跋炕,使它們都可以獨(dú)立地變化赖晶;遵循依賴倒置原則;
2. 將可以共享的變化部分辐烂,抽離出來(lái)遏插,減少了代碼的重復(fù)信息;
3. 橋接模式是一種很實(shí)用的結(jié)構(gòu)型模式纠修,如果軟件系統(tǒng)中某個(gè)類存在兩個(gè)獨(dú)立變化的維度胳嘲,通過(guò)該模式可以將這兩個(gè)維度分離出來(lái),使兩者可以獨(dú)立擴(kuò)展扣草,讓系統(tǒng)更加符合單一職責(zé)原則了牛。
二、原則:
設(shè)計(jì)中有超過(guò)一維的變化我們就可以用橋模式辰妙。如果只有一維在變化鹰祸,那么我們用繼承就可以圓滿的解決問(wèn)題。優(yōu)先使用對(duì)象的合成/聚合將有助于保持每個(gè)類被封裝密浑,并被集中在單個(gè)任務(wù)上蛙婴。這樣類和類繼承層次會(huì)保持較小規(guī)模,并且不太可能增長(zhǎng)為不可控制的龐然大物尔破。
三敬锐、常用的場(chǎng)景:
1. 當(dāng)一個(gè)對(duì)象有多個(gè)變化因素的時(shí)候,考慮依賴于抽象的實(shí)現(xiàn)呆瞻,而不是具體的實(shí)現(xiàn)台夺。
2. 當(dāng)多個(gè)變化因素在多個(gè)對(duì)象間共享時(shí),考慮將這部分變化的部分抽象出來(lái)再聚合/合成進(jìn)來(lái)痴脾。
3. 當(dāng)我們考慮一個(gè)對(duì)象的多個(gè)變化因素可以動(dòng)態(tài)變化的時(shí)候颤介,考慮使用橋接模式。
四、實(shí)例:
在不同品牌電腦上安裝操作系統(tǒng)滚朵;不同品牌電腦可以是聯(lián)想冤灾、Dell、蘋果辕近、方正韵吨、宏基等等;不同操作系統(tǒng)可以是windows10移宅、Mac os归粉、linux等等;可以將操作系統(tǒng)漏峰、品牌電腦按各自的方向抽象糠悼;再通過(guò)合成/聚合的方式關(guān)聯(lián)起來(lái);
//操作系統(tǒng)
class OS
{
public:
virtual void InstallOS_Imp() {}
};
class WindowOS: public OS
{
public:
void InstallOS_Imp() { cout<<"安裝Window操作系統(tǒng)"<<endl; }
};
class LinuxOS: public OS
{
public:
void InstallOS_Imp() { cout<<"安裝Linux操作系統(tǒng)"<<endl; }
};
class UnixOS: public OS
{
public:
void InstallOS_Imp() { cout<<"安裝Unix操作系統(tǒng)"<<endl; }
};
//計(jì)算機(jī)
class Computer
{
public:
virtual void InstallOS(OS *os) {}
};
class DellComputer: public Computer
{
public:
void InstallOS(OS *os) { os->InstallOS_Imp(); }
};
class AppleComputer: public Computer
{
public:
void InstallOS(OS *os) { os->InstallOS_Imp(); }
};
class HPComputer: public Computer
{
public:
void InstallOS(OS *os) { os->InstallOS_Imp(); }
};
int main()
{
OS *os1 = new WindowOS();
OS *os2 = new LinuxOS();
Computer *computer1 = new AppleComputer();
computer1->InstallOS(os1);
computer1->InstallOS(os2);
}