您好,登錄后才能下訂單哦!
本篇內容主要講解“java中的橋接模式是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java中的橋接模式是什么”吧!
引例
橋接模式
實戰示例
代碼:
總結
需求:對不同手機類型的不同品牌(比如按鍵手機:諾基亞、翻蓋手機:紐曼、智能手機:華為、小米)實現操作編程(比如: 開機、關機、打電話)。
先來說說一般解法:將不同手機類型繼承父類手機,最后各個品牌再繼承對應手機類型:
弊端:乍一看沒問題,但其實不易擴展(類爆炸),如果增加新的手機類型(比如新興的折疊式),就需要增加各個手機品牌的類去繼承(比如已繼承智能手機的華為小米)。同樣如果我們增加一個手機品牌,也要在各個手機樣式類下增加。違反了單一職責原則,維護成本高。
解決方案就是下面的主角:橋接模式。
橋接模式(Bridge)是一種結構型設計模式。顧名思義,就像搭個橋連接起來,通過使用封裝、聚合及繼承等行為讓不同的類承擔不同的職責,將實現與抽象放在兩個不同的類層次中,使兩個層次可以獨立改變,保持各部分的獨立性以及應對他們的功能擴展。
原理類圖:
Client類:客戶端調用
Abstraction抽象類:充當橋接類,維護了Implementor接口(即它的實現類ConcreteImplementorA…)
RefindAbstraction類:是抽象類的子類
Implementor接口:行為實現接口
ConcreteImplementorA/B類:行為的具體實現類
從UML類圖看出,抽象類和接口是聚合的關系,即調用和被調用的關系。如此一來搭好橋后,具體實現類調用方法=》父類抽象類的方法=》行為接口方法=》具體接口行為實現類,以完成連接,同時兩者又相互獨立易擴展:
用橋接模式來解決引例的實際問題。
類圖:
//接口 public interface Brand { void open(); //開機 void close(); //關機 void call();//打電話 } //接口實現類 public class NOKIA implements Brand{ @Override public void open() { System.out.println("諾基亞手機開機"); } @Override public void close() { System.out.println("諾基亞手機關機"); } @Override public void call() { System.out.println("諾基亞手機打電話"); } } public class Newsmy implements Brand{ @Override public void open() { System.out.println("紐曼手機開機"); } @Override public void close() { System.out.println("紐曼手機關機"); } @Override public void call() { System.out.println("紐曼手機打電話"); } } public class Huawei implements Brand{ @Override public void open() { System.out.println("華為手機開機"); } @Override public void close() { System.out.println("華為手機關機"); } @Override public void call() { System.out.println("華為手機打電話"); } } public class Xiaomi implements Brand{ @Override public void open() { System.out.println("小米手機開機"); } @Override public void close() { System.out.println("小米手機關機"); } @Override public void call() { System.out.println("小米手機打電話"); } }
//抽象類 public abstract class Phone { private Brand brand;//手機品牌接口 public Phone(Brand brand) {//構造器 super(); this.brand = brand; } public void open() { this.brand.open(); } public void close() { this.brand.close(); } public void call() { this.brand.call(); } } //抽象子類 public class ButtonPhone extends Phone{ public ButtonPhone(Brand brand) { super(brand); } public void open() { super.open(); System.out.println("按鍵手機"); } public void close() { super.close(); System.out.println("按鍵手機"); } public void call() { super.call(); System.out.println("按鍵手機"); } } public class SlidePhone extends Phone{ public SlidePhone(Brand brand) { super(brand); } public void open() { super.open(); System.out.println("翻蓋手機"); } public void close() { super.close(); System.out.println("翻蓋手機"); } public void call() { super.call(); System.out.println("翻蓋手機"); } } public class SmartPhone extends Phone{ public SmartPhone(Brand brand) { super(brand); } public void open() { super.open(); System.out.println("智能手機"); } public void close() { super.close(); System.out.println("智能手機"); } public void call() { super.call(); System.out.println("智能手機"); } }
//客戶端調用 public class Client { public static void main(String[] args) { Phone phone1 = new ButtonPhone(new NOKIA()); phone1.open(); phone1.call(); phone1.close(); System.out.println("======================="); Phone phone2 = new SlidePhone(new Newsmy()); phone2.open(); phone2.call(); phone2.close(); System.out.println("======================="); Phone phone3 = new SmartPhone(new Huawei()); phone3.open(); phone3.call(); phone3.close(); } }
實現了抽象和實現部分的分離,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來,這有助于系統進行分層設計,從而產生更好的結構化系統。
橋接模式替代多層繼承方案,可以減少子類的個數,降低系統的管理和維護成本。
橋接模式的引入增加了系統的理解和設計難度,由于聚合關聯關系建立在抽象層,要求開發者針對抽象進行設計和編程
常見的應用場景: -JDBC驅動程序
-銀行轉賬系統
轉賬分類: 網上轉賬,柜臺轉賬,AMT轉賬
轉賬用戶類型:普通用戶,銀卡用戶,金卡用戶…
-消息管理
消息類型:即時消息,延時消息
消息分類:手機短信,郵件消息,QQ消息…
到此,相信大家對“java中的橋接模式是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。