1. 程式人生 > >Java描述設計模式(08):橋接模式

Java描述設計模式(08):橋接模式

本文原始碼:GitHub·點這裡 || GitEE·點這裡

一、橋接模式簡介

1、基礎描述

橋樑模式是物件的結構模式。又稱為柄體(Handle and Body)模式或介面(Interface)模式。橋樑模式的用意是“將抽象化(Abstraction)與實現化(Implementation)脫耦,使得二者可以獨立地變化”。

2、場景問題描述

1)、場景分析

在一個複雜的系統中,訊息通知是一個必備模組,一般封裝方式主要從下面兩個方式入手:

  • 訊息型別
使用者端訊息(user-client)
管理端訊息(system-client)
  • 訊息接收
郵件傳送(email)
簡訊傳送(msg)

2)、場景圖解

3)、原始碼實現

/**
 * 橋接模式場景應用
 */
public class C01_InScene {
    public static void main(String[] args) {
        // 建立具體的實現物件
        MsgImplementor implementor = new SendBySMS() ;
        // 建立普通的訊息物件
        AbstractMsg abstractMessage = new UserMsg(implementor);
        abstractMessage.sendMessage("您的賬戶異地登陸", "使用者A0001");
        // 切換為郵件方式且加急處理
        implementor = new SendByEmail() ;
        abstractMessage = new AdminMsg(implementor);
        abstractMessage.sendMessage("專案上線通知", "運維S0001");
    }
}
/**
 * 封裝訊息型別
 */
abstract class AbstractMsg {
    // 持有一個實現部分的物件
    MsgImplementor impl ;
    public AbstractMsg (MsgImplementor impl){
        this.impl = impl ;
    }
    /**
     * 傳送訊息,委派給實現部分的方法
     * @param message    要傳送訊息的內容
     * @param toUser    訊息的接受者
     */
    public void sendMessage (String message, String toUser){
        this.impl.send(message, toUser);
    }
}
class AdminMsg extends AbstractMsg{
    public AdminMsg(MsgImplementor impl) {
        super(impl);
    }
    @Override
    public void sendMessage(String message, String toUser) {
        message = "辛苦的管理員:"+message;
        super.sendMessage(message, toUser);
    }
}
class UserMsg extends AbstractMsg{
    public UserMsg(MsgImplementor impl) {
        super(impl);
    }
    @Override
    public void sendMessage(String message, String toUser) {
        message = "尊敬的使用者:" + message ;
        super.sendMessage(message, toUser);
    }
}

/**
 * 封裝訊息傳送
 */
interface MsgImplementor {
    void send (String message , String toUser) ;
}
class SendBySMS implements MsgImplementor{
    @Override
    public void send(String message, String toUser) {
        System.out.println("簡訊通知:"+toUser+";內容:"+message);
    }
}
class SendByEmail implements MsgImplementor{
    @Override
    public void send(String message, String toUser) {
        System.out.println("郵件通知:"+toUser+";內容:"+message);
    }
}

二、橋接模式

1、模式圖解

2、核心角色

  • 抽象化(Abstraction)角色

抽象化給出的定義,並儲存一個對實現化物件的引用。

  • 修正抽象化(RefinedAbstraction)角色

擴充套件抽象化角色,改變修正父類對抽象化的定義。

  • 實現化(Implementor)角色

這個角色給出實現化角色的介面,但不給出具體的實現。

  • 具體實現化(ConcreteImplementor)角色

這個角色給出實現化角色介面的具體實現。

3、原始碼封裝

abstract class Abstraction {
    private Implementor implementor  ;
    public Abstraction (Implementor implementor){
        this.implementor = implementor ;
    }
    // 例項方法
    public void operation (){
        implementor.operationImpl();
    }
}
class RefinedAbstraction extends Abstraction{
    public RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }
    //其他的操作方法
    public void otherOperation(){
    }
}
abstract class Implementor {
    // 示例方法,實現抽象部分需要的某些具體功能
    public abstract void operationImpl () ;
}
class ConcreteImplementorA extends Implementor{
    @Override
    public void operationImpl() {
        System.out.println("ConcreteImplementorA.operationImpl()");
    }
}
class ConcreteImplementorB extends Implementor{
    @Override
    public void operationImpl() {
        System.out.println("ConcreteImplementorB.operationImpl()");
    }
}

三、Java應用場景

橋樑模式在Java應用中的一個非常典型的例子就是JDBC驅動器。抽象API可以對各種資料庫引擎發出SQL指令,並不直接與資料庫引擎互動,JDBC驅動器負責這個底層的工作。

JDBC的這種架構,把抽象部分和具體部分分離開來,從而使得抽象部分和具體部分都可以獨立地擴充套件。

四、原始碼地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

相關推薦

Java描述設計模式(08)模式

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、橋接模式簡介 1、基礎描述 橋樑模式是物件的結構模式。又稱為柄

Java設計模式9模式

一、橋接模式: 橋接模式是用於把抽象化與實現化解耦,使得二者可以獨立變化。這種型別的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。 二、示例程式碼: 先來考慮下如下場景: 傳送訊息功能。基本上所有帶業務流程處理的系統都會有這樣的功能,比如OA上

java常用設計模式模式

this 橋接 abstract pub image sys cli 分享圖片 有一個 一、概述 將抽象部分與它的實現部分分離,使它們都可以獨立地變化。它是一種對象結構型模式。比如存在2個維度,第一個維度有一個抽象類A和對應的子類A1和A2;第二個維度有另一個

C#設計模式系列模式(Bridge)

span -i 原來 派生 引用 分享圖片 on() 版本 nta 1.1定義 當一個抽象可能有多個實現時,通常用繼承來進行協調。抽象類定義對該抽象的接口,而具體的子類則用不同的方式加以實現。繼承機制將抽象部分與它的實現部分固定在一起,使得難以對抽象部分和實現部分獨立地進行

JAVA設計模式(7)模式

橋接模式將定義與其實現分離。 它是一種結構模式。 橋接(Bridge)模式涉及充當橋接的介面。橋接使得具體類與介面實現者類無關。 這兩種型別的類可以改變但不會影響對方。當需要將抽象與其實現去耦合時使用橋接解耦(分離),使得兩者可以獨立地變化。這種型別的設計模式屬於結構模式,因為此模式通過在它

設計模式之十八模式(Bridge)

ora 它的 pla sin string src ams down ng- 橋接模式: 將抽象部分和它的實現部分相分離開來,以使它們能夠單獨地變化。 UML圖: 主要包含: Abstraction:定義了抽象部分的接口。操作一個實現部分對

Java設計模式學習記錄-模式

www 方便 就是 奔騰 一個 splay public face mage 前言 這次介紹結構型設計模式中的第二種模式,橋接模式。 使用橋接模式的目的就是為了解耦,松散的耦合更利於擴展,但是會增加相應的代碼量和設計難度。 橋接模式 橋接模式是為了將抽象化與實現

路一步步走>> 設計模式-Bridge

理解的不是很深 。用到在看。 package com.test.DPs.JieGou.Bridge; /** * 結構型:Bridge-橋接 橋接:作用面為 物件 * * 用途:將抽象部分與它的實現部分分離,使它們都可以獨立的變化。 */ interface DrawA

設計模式(七)模式

優點:   ① 分離抽象介面及其實現部分。提高了比繼承更好的解決方案。   ② 橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴充套件一個維度,都不需要修改原有系統。 缺點:   ① 橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發

設計模式模式及程式碼示例、模式在jdbc中的體現、注意事項

# 0、背景 加入一個手機分為多種款式,不同款式分為不同品牌。這些詳細分類下分別進行操作。 如果傳統做法,需要將手機,分為不同的子類,再繼續分,基本屬於一個龐大的多叉樹,然後每個葉子節點進行相同名稱、但是細節不同的功能實現。 **問題**: 1. **類爆炸**:類的增加基本沒有任何優

設計模式學習筆記-模式

學習 write images 基礎 abs 分離 對象 bsp uml 一、概述 將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 二、模式中的角色 Abstraction:定義抽象類的接口;維護一個指向Implementor類型對象的指針;

C#設計模式之八模式(Bridge)【結構型】

升級 方向 implement 詳細 .cn mage names 這樣的 意圖 一、引言 今天我們要講【結構型】設計模式的第二個模式,該模式是【橋接模式】,也有叫【橋模式】的。大家第一次看到這個名稱會想到什麽呢?我第一次看到這個模式根據名稱猜肯定是連接什麽東西的。因為

Linux模式、NAT模式下不能ping通百度

最近在搞Hadoop的時候,突然間想到要用網路,然後按照傳統的方式進行橋接方式、NAT方式進行配置網路,很尷尬的是用ping命令在終端下內網外網都是能ping通的,到了ping百度,就不行了!!!!! ping完就停在這裡了 真的是很無奈啊!? 本來以為是因為校園網有限制,但是用手機的熱

結構型模式及相關應用

文章目錄 橋接(Bridge) 優缺點 應用場景 JDBC的應用 參考資料 橋接(Bridge) 將抽象部分與它的具體實現部分分離,使它們都可以獨立地變化。 通過組合的方式建立兩個類之間

弄透VMware虛擬機器的網路設定三大模式模式,主機模式、NAT模式

前言:我們在使用的虛擬機器的時候,總會碰到很多網路設定相關的東西。我在深受其害之後,苦心專研之後,決定統一整理下虛擬機器網路設定的三大模式: 1,橋接模式:你的虛擬機器能夠上網能夠訪問你的主機,網路上其他計算機和自己的計算機都能訪問到你的虛擬機器。 2,主機模式:顧

設計模式學習(模式

一.設計意圖:      將抽象部分與它的實現部分分離,將他們都可以獨立地變化。      手機有很多牌子且在不斷變換,但是App應用也會不斷增多。所以程式要讓抽象部分(手機)與實現部分(App)分類,獨自變換。我們就已這個例子來介紹橋接模式。 二.例子:      

VM-003 VMmare 在實踐中深入理解VMware虛擬機器的上網模式模式

0.說明    本篇博文為《在實踐中深入理解VMware虛擬機器的上網模式》系列的其中一篇:NAT模式。    有關於深入理解VMware虛擬機器的上網模式的意義,可以參考本系列博文的另一篇《在實踐中深入理解VMware虛擬機器的上網模式:NAT模式》中的說明部分,這裡不再展開說明。    本博文的撰寫方式還

07模式——C++實現

目錄 一、介紹 二、應用場景 三、要點 四、樣例 五、優缺點 六、和介面卡模式異同  一、介紹  橋接(Bridge)是用於把抽象化與實現化解耦,使得二者可以獨立變化。這種型別的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構

設計模式-結構型- 模式(Bridge)

定義 將抽象部分與它的實現部分分享,使它們都可以獨立地變化 角色 抽象角色(Abstraction):定義了抽象類的介面而且維護著一個指向實現角色的引用 具體抽象角色(RefinedAbstr

遊戲中的設計模式四(模式

寫在前面在遊戲中的角色和武器,往往一個角色可以裝換多種武器,武器也擁有諸多型別當角色需要配備不同武器時候,需要修改角色類,使其配備另外的武器物件這樣造成物件與物件之間耦合性高,並且不容易擴充套件使用橋接模式,將抽象與實現分離,使它們都可以獨立地變化案例分析在各個幫派角色中,可