偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

什么是橋接模式?你可能還不知道

開發(fā) 前端
用于系統(tǒng)的初步設(shè)計(jì),對(duì)于存在兩個(gè)獨(dú)立變化維度的類可以將其分為抽象化和實(shí)現(xiàn)化兩個(gè)角色,使它們可以分別進(jìn)行變化。
  •  1. 橋接模式概述
  • 2. 橋接模式的結(jié)構(gòu)與實(shí)現(xiàn)
  • 3. 橋接模式的應(yīng)用實(shí)例
  • 4. 橋接模式與適配器模式的聯(lián)用
  • 5. 橋接模式的優(yōu)缺點(diǎn)與適用環(huán)境

“Github:https://github.com/nateshao/design-demo/tree/main/JavaDesignPatterns/10-bridge

1. 橋接模式概述

定義

“橋接模式:將抽象部分與它的實(shí)現(xiàn)部分解耦,使得兩者都能夠獨(dú)立變化。

對(duì)象結(jié)構(gòu)型模式

  • 又被稱為柄體(Handle and Body)模式或接口(Interface)模式
  • 用抽象關(guān)聯(lián)取代了傳統(tǒng)的多層繼承
  • 將類之間的靜態(tài)繼承關(guān)系轉(zhuǎn)換為動(dòng)態(tài)的對(duì)象組合關(guān)系

橋接模式的結(jié)構(gòu)

橋接模式包含以下4個(gè)角色:

  • Abstraction(抽象類)
  • RefinedAbstraction(擴(kuò)充抽象類)
  • Implementor(實(shí)現(xiàn)類接口)
  • ConcreteImplementor(具體實(shí)現(xiàn)類)

2. 橋接模式的結(jié)構(gòu)與實(shí)現(xiàn)

典型的實(shí)現(xiàn)類接口代碼:

  1. public interface Implementor { 
  2.     public void operationImpl(); 

典型的具體實(shí)現(xiàn)類代碼:

  1. public class ConcreteImplementor implements Implementor { 
  2.     public void operationImpl() { 
  3.         //具體業(yè)務(wù)方法的實(shí)現(xiàn) 
  4.     } 

典型的具體實(shí)現(xiàn)類代碼:

  1. public abstract class Abstraction { 
  2.     protected Implementor impl; //定義實(shí)現(xiàn)類接口對(duì)象 
  3.   
  4.     public void setImpl(Implementor impl) { 
  5.         this.impl=impl; 
  6.     } 
  7.   
  8.     public abstract void operation(); //聲明抽象業(yè)務(wù)方法 

典型的 擴(kuò)充抽象類(細(xì)化抽象類) 代碼:

  1. public class RefinedAbstraction extends Abstraction { 
  2.     public void operation() { 
  3.         //業(yè)務(wù)代碼 
  4.         impl.operationImpl(); //調(diào)用實(shí)現(xiàn)類的方法 
  5.         //業(yè)務(wù)代碼 
  6.     } 

3. 橋接模式的應(yīng)用實(shí)例

“實(shí)例說(shuō)明:某軟件公司要開發(fā)一個(gè)跨平臺(tái)圖像瀏覽系統(tǒng),要求該系統(tǒng)能夠顯示BMP、JPG、GIF、PNG等多種格式的文件,并且能夠在Windows、Linux、UNIX等多個(gè)操作系統(tǒng)上運(yùn)行。系統(tǒng)首先將各種格式的文件解析為像素矩陣(Matrix),然后將像素矩陣顯示在屏幕上,在不同的操作系統(tǒng)中可以調(diào)用不同的繪制函數(shù)來(lái)繪制像素矩陣。另外,系統(tǒng)需具有較好的擴(kuò)展性,以便在將來(lái)支持新的文件格式和操作系統(tǒng)。試使用橋接模式設(shè)計(jì)該跨平臺(tái)圖像瀏覽系統(tǒng)。

實(shí)例類圖:

跨平臺(tái)圖像瀏覽系統(tǒng)結(jié)構(gòu)圖

實(shí)例代碼

  • Matrix:像素矩陣類,輔助類
  • ImageImp:抽象操作系統(tǒng)實(shí)現(xiàn)類,充當(dāng)實(shí)現(xiàn)類接口
  • WindowsImp:Windows操作系統(tǒng)實(shí)現(xiàn)類,充當(dāng)具體實(shí)現(xiàn)類
  • LinuxImp:Linux操作系統(tǒng)實(shí)現(xiàn)類,充當(dāng)具體實(shí)現(xiàn)類
  • UnixImp:UNIX操作系統(tǒng)實(shí)現(xiàn)類,充當(dāng)具體實(shí)現(xiàn)類
  • Image:抽象圖像類,充當(dāng)抽象類
  • JPGImage:JPG格式圖像類,充當(dāng)擴(kuò)充抽象類
  • PNGImage:PNG格式圖像類,充當(dāng)擴(kuò)充抽象類
  • BMPImage:BMP格式圖像類,充當(dāng)擴(kuò)充抽象類
  • GIFImage:GIF格式圖像類,充當(dāng)擴(kuò)充抽象類
  • Client:客戶端測(cè)試類

“結(jié)果及分析:如果需要更換圖像文件格式或者更換操作系統(tǒng),只需修改配置文件即可

  1. <?xml version="1.0"?> 
  2. <config> 
  3.     <!--RefinedAbstraction--> 
  4.     <className>designpatterns.bridge.JPGImage</className>  
  5.     <!--ConcreteImplementor--> 
  6.     <className>designpatterns.bridge.WindowsImp</className> 
  7. </config> 

4. 橋接模式與適配器模式的聯(lián)用

橋接模式:用于系統(tǒng)的初步設(shè)計(jì),對(duì)于存在兩個(gè)獨(dú)立變化維度的類可以將其分為抽象化和實(shí)現(xiàn)化兩個(gè)角色,使它們可以分別進(jìn)行變化

適配器模式:當(dāng)發(fā)現(xiàn)系統(tǒng)與已有類無(wú)法協(xié)同工作時(shí)

橋接模式與適配器模式聯(lián)用示意圖

5. 橋接模式的優(yōu)缺點(diǎn)與適用環(huán)境

模式優(yōu)點(diǎn)

  • 分離抽象接口及其實(shí)現(xiàn)部分
  • 可以取代多層繼承方案,極大地減少了子類的個(gè)數(shù)
  • 提高了系統(tǒng)的可擴(kuò)展性,在兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度,不需要修改原有系統(tǒng),符合開閉原則

模式缺點(diǎn)

  • 會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者一開始就針對(duì)抽象層進(jìn)行設(shè)計(jì)與編程
  • 正確識(shí)別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度并不是一件容易的事情

模式適用環(huán)境

需要在抽象化和具體化之間增加更多的靈活性,避免在兩個(gè)層次之間建立靜態(tài)的繼承關(guān)系

抽象部分和實(shí)現(xiàn)部分可以以繼承的方式獨(dú)立擴(kuò)展而互不影響

一個(gè)類存在兩個(gè)(或多個(gè))獨(dú)立變化的維度,且這兩個(gè)(或多個(gè))維度都需要獨(dú)立地進(jìn)行擴(kuò)展

不希望使用繼承或因?yàn)槎鄬永^承導(dǎo)致系統(tǒng)類的個(gè)數(shù)急劇增加的系統(tǒng)

 

責(zé)任編輯:武曉燕 來(lái)源: 程序員千羽
相關(guān)推薦

2022-05-05 12:02:45

SCSS函數(shù)開發(fā)

2020-12-14 07:51:16

JS 技巧虛值

2021-03-18 14:02:56

iOS蘋果細(xì)節(jié)

2020-10-28 08:06:09

Vue3框架數(shù)據(jù)

2015-07-13 08:49:54

2016-07-22 17:55:07

云計(jì)算

2025-02-27 08:33:13

2012-11-23 10:57:44

Shell

2023-04-09 23:37:31

JavaScript開發(fā)

2010-03-12 09:15:28

Firefox新功能

2023-02-27 09:20:24

絕對(duì)定位CSS

2023-01-29 09:46:47

Dialog彈窗模態(tài)

2018-09-02 15:43:56

Python代碼編程語(yǔ)言

2025-08-18 02:55:00

Spring數(shù)據(jù)庫(kù)容器

2022-07-17 06:53:24

微服務(wù)架構(gòu)

2021-01-05 11:22:58

Python字符串代碼

2020-01-29 19:40:36

Python美好,一直在身邊Line

2015-08-13 09:03:14

調(diào)試技巧

2019-11-20 10:25:06

sudoLinux

2020-06-03 08:53:40

CSS偽類 JS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)