如何做網(wǎng)站不被坑新聞?lì)^條最新消息今天發(fā)布
一.橋接模式核心要點(diǎn)
- 處理多層繼承結(jié)構(gòu),處理多維度變化的場(chǎng)景,將各個(gè)維度設(shè)計(jì)成獨(dú)立的繼承結(jié)構(gòu),使各個(gè)維度可以獨(dú)立的擴(kuò)展在抽象層建立關(guān)系。 \color{red}{處理多層繼承結(jié)構(gòu),處理多維度變化的場(chǎng)景,將各個(gè)維度設(shè)計(jì)成獨(dú)立的繼承結(jié)構(gòu),使各個(gè)維度可以獨(dú)立的擴(kuò)展在抽象層建立關(guān)系。} 處理多層繼承結(jié)構(gòu),處理多維度變化的場(chǎng)景,將各個(gè)維度設(shè)計(jì)成獨(dú)立的繼承結(jié)構(gòu),使各個(gè)維度可以獨(dú)立的擴(kuò)展在抽象層建立關(guān)系。
二.橋接模式實(shí)際開(kāi)發(fā)中應(yīng)用的場(chǎng)景
- JDBC驅(qū)動(dòng)程序
- OA系統(tǒng)中的消息處理:
- 業(yè)務(wù)消息:普通消息、加急消息、特急消息
- 發(fā)送消息方式:系統(tǒng)內(nèi)消息、手機(jī)短信、郵件
- 銀行日志管理
- 格式分類(lèi): 操作日志、交易日志、異常日志
- 距離分類(lèi):本地記錄日志、異地記錄日志
三.橋接模式舉例講解
-
1.業(yè)務(wù):
- 商城系統(tǒng)中常見(jiàn)的商品分類(lèi),以電腦為例,電腦類(lèi)型分為臺(tái)式電腦、平板電腦、筆記本電腦,電腦品牌分為華碩、戴爾、聯(lián)想等等,具體類(lèi)型可能是‘華碩臺(tái)式電腦’,這個(gè)業(yè)務(wù)存在兩個(gè)維度變化,那么如何良好的處理商品分類(lèi)銷(xiāo)售的問(wèn)題?
-
2.不使用橋接模式:
- 我們可以使用多繼承結(jié)構(gòu)實(shí)現(xiàn),這個(gè)時(shí)候存在兩個(gè)維度變化,就會(huì)形成笛卡爾積。
- 類(lèi)個(gè)數(shù)膨脹問(wèn)題:
- 如果要增加一個(gè)新的電腦類(lèi)型,則要增加各個(gè)品牌下面的類(lèi);
- 如果要增加一個(gè)品牌,也要增加各種電腦類(lèi)型的類(lèi)。
- 違法單一職責(zé)原則:
- 一個(gè)類(lèi),聯(lián)想筆記本,有兩個(gè)引起這個(gè)類(lèi)變化的因素,違法單一職責(zé)原則
- 類(lèi)個(gè)數(shù)膨脹問(wèn)題:
- 我們可以使用多繼承結(jié)構(gòu)實(shí)現(xiàn),這個(gè)時(shí)候存在兩個(gè)維度變化,就會(huì)形成笛卡爾積。
-
3.橋接模式實(shí)現(xiàn):
/*** 電腦類(lèi)型*/public interface Computer {String getTypeName();}public class Laptop implements Computer{@Overridepublic String getTypeName() {return "筆記本電腦";}}public class Desktop implements Computer{@Overridepublic String getTypeName() {return "臺(tái)式電腦";}}/*** 可以隨意添加,不會(huì)影響其他類(lèi)*//*public class Aad implements Computer{@Overridepublic String getTypeName() {return "平板電腦";}}*/
/*** 品牌*/public abstract class Brand {Computer computer;public Brand(Computer computer) {this.computer = computer;}public abstract String getBrand();public void operation() {System.out.println(getBrand()+computer.getTypeName());}
}
/*** 華碩電腦*/
public class ASUS extends Brand{public ASUS(Computer computer) {super(computer);}@Overridepublic String getBrand() {return "華碩";}
}
/*** 戴爾電腦*/
public class Dell extends Brand{public Dell(Computer computer) {super(computer);}@Overridepublic String getBrand() {return "戴爾";}
}
/*** 聯(lián)想電腦*/
public class Lenovo extends Brand{public Lenovo(Computer computer) {super(computer);}@Overridepublic String getBrand() {return "聯(lián)想";}
}/*** 可以隨意添加,不會(huì)影響其他類(lèi)*/
/*public class Shenzhou extends Brand{public Shenzhou(Computer computer) {super(computer);}@Overridepublic String getBrand() {return "神州";}
}*/
/*** 橋接模式:可以取代多層繼承的方案!**/
public class App {public static void main(String[] args) {Brand c = new Dell(new Desktop());c.operation();}
}
四.橋接模式總結(jié):
- 橋接模式可以取代多層繼承關(guān)系。多層繼承關(guān)系違背了單一職責(zé)原則,復(fù)用性較差,類(lèi)的個(gè)數(shù)也非常多。橋接模式可以極大的減少子類(lèi)的個(gè)數(shù),從而降低管理和維護(hù)的成本。 \color{red}{橋接模式可以取代多層繼承關(guān)系。多層繼承關(guān)系違背了單一職責(zé)原則,復(fù)用性較差,類(lèi)的個(gè)數(shù)也非常多。橋接模式可以極大的減少子類(lèi)的個(gè)數(shù),從而降低管理和維護(hù)的成本。} 橋接模式可以取代多層繼承關(guān)系。多層繼承關(guān)系違背了單一職責(zé)原則,復(fù)用性較差,類(lèi)的個(gè)數(shù)也非常多。橋接模式可以極大的減少子類(lèi)的個(gè)數(shù),從而降低管理和維護(hù)的成本。
- 橋接模式極大的提高了系統(tǒng)可擴(kuò)展性,在兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度,都不需要修改原有的系統(tǒng),符合開(kāi)閉原則。 \color{red}{橋接模式極大的提高了系統(tǒng)可擴(kuò)展性,在兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度,都不需要修改原有的系統(tǒng),符合開(kāi)閉原則。} 橋接模式極大的提高了系統(tǒng)可擴(kuò)展性,在兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度,都不需要修改原有的系統(tǒng),符合開(kāi)閉原則。
更多設(shè)計(jì)模式學(xué)習(xí):
??????????設(shè)計(jì)模式(1):介紹
??????????設(shè)計(jì)模式(2):單例模式
??????????設(shè)計(jì)模式(3):工廠模式
??????????設(shè)計(jì)模式(4):建造者模式
??????????設(shè)計(jì)模式(5):原型模式
??????????設(shè)計(jì)模式(7):裝飾器模式
??????????設(shè)計(jì)模式持續(xù)更新中…