java設計模式7——橋接模式

来源:https://www.cnblogs.com/xgp123/archive/2020/02/17/12309435.html
-Advertisement-
Play Games

1、橋接模式介紹 2、解決問題 3、代碼演示 4、類圖示意 5、好處分析 6、弊端分析 7、最佳實現 8、現已經使用的場景 ...


java設計模式7——橋接模式

1、橋接模式介紹

橋接模式是將抽象部分與它的實現部分分離,使他們都可以獨立的變化。它是一種對象結構型模式,又稱為柄體模式或介面模式。

2、解決問題

2.1、將複雜的組合設計問題轉變為可以橋接的組合問題。如電腦的例子,電腦有類型和品牌,兩者可以任意組合。

2.2、沒有用設計模式時的示意圖

2.3、使用橋接模式後的示意圖

將這個場景中的兩個變化的維度分離,品牌和類型。兩者通過橋接進行兩兩組合。

3、代碼演示:

3.1、編寫品牌的抽象類

package com.xgp.company.結構性模式.橋接模式;

/**
 * 品牌類
 */
public interface Brand {
    void info();
}

3.2、由抽象類誕生出品牌

蘋果:

package com.xgp.company.結構性模式.橋接模式;

/**
 * 蘋果品牌
 */
public class Apple implements Brand {
    @Override
    public void info() {
        System.out.print("蘋果");
    }
}

聯想:

package com.xgp.company.結構性模式.橋接模式;

public class Laptop extends Computer {
    public Laptop(Brand brand) {
        super(brand);
    }

    @Override
    protected void info() {
        super.info();
        System.out.println("筆記本");
    }
}

3.3、電腦類型的抽象類

package com.xgp.company.結構性模式.橋接模式;

/**
 * 抽象的電腦類型類
 */
public abstract class Computer {

    //組合:品牌,電腦自帶品牌
    protected Brand brand;

    public Computer(Brand brand) {
        this.brand = brand;
    }

    protected void info() {
        //自帶品牌
        brand.info();
    }
}

3.4、由電腦類型的抽象類誕生實現類

台式電腦:

package com.xgp.company.結構性模式.橋接模式;

public class Desktop extends Computer {
    public Desktop(Brand brand) {
        super(brand);
    }

    @Override
    protected void info() {
        super.info();
        System.out.println("台式機");
    }
}

筆記本電腦:

package com.xgp.company.結構性模式.橋接模式;

public class Laptop extends Computer {
    public Laptop(Brand brand) {
        super(brand);
    }

    @Override
    protected void info() {
        super.info();
        System.out.println("筆記本");
    }
}

3.5、編寫測試類,進行橋接

package com.xgp.company.結構性模式.橋接模式;

public class Test {
    public static void main(String[] args) {
        //蘋果筆記本
        Computer computer = new Laptop(new Apple());
        computer.info();
        //聯想台式機
        Computer computer12 = new Desktop(new Lenovo());
        computer12.info();
    }
}

輸出結果:

蘋果筆記本
聯想台式機

4、類圖示意:

5、好處分析:

6、弊端分析:

7、最佳實現

8、現已經使用的場景


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ES6)新增加了兩個重要的 JavaScript 關鍵字:let 和 const。以前聲明變數時只有一種方式:var,ES6對聲明方式進行了擴展,現在可以有三種聲明方式了。 1、var:variable的簡寫,字面意思就是變數。 2、let:let的意思(vt. 允許,讓;出租;假設;妨礙;vi. ...
  • 動畫DOM及CSS操作 自定義動畫 animate(最終css狀態,時間) 這個最終css狀態是一個對象 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>demo</title> <style> div{ w ...
  • 先看代碼: let fn1 = function (x) { return x + 10; }; let fn2 = function (x) { return x * 10; }; let fn3 = function (x) { return x / 10; }; console.log(fn3 ...
  • 方法一: if ($("#checkbox-id").get(0).checked) { // do something } 方法二: if($('#checkbox-id').is(':checked')) { // do something } 方法三: if ($('#checkbox-id' ...
  • 通過運算符可以對一個或多個值進行運算,並且一定有運算結果返回 算數運算符 ​ 算數運算符包括相加(+)、相減( )、相乘( )、相除(/)、取模(%)。任何值與字元串相加都會轉換為字元串,做的是字元串連。除了與字元串做加法,當對非 Number 類型的值進行運算時,會將這些值轉換為 Number 再 ...
  • 如何實現下麵這個漸變的邊框效果: 這個問題本身不難,實現的方法也有一些,主要是有一些細節需要註意。 border-image border-image 是 CSS 規範 CSS Backgrounds and Borders Module Level 3 (最新一版的關於 background 和 ...
  • 一、官方文檔:https://element.eleme.cn/#/zh-CN/component/calendar 發現官方並無農曆顯示的介紹 二、1. 自己寫陽曆轉陰曆的方法或引入別人寫好的 JS 文件,如中國農曆(陰陽曆)和西元陽曆即西曆互轉 JavaScript 庫 2. 如果是引入上面的 ...
  • vue框架中props的typescript用法 在vue中使用typescript時,需要引入vue property decorator庫來相容格式。 javascript寫法 typescript寫法 typescript和javascript在用法的區別,主要是需要嚴格規定label_lis ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...