菜鳥版JAVA設計模式-從抽象與實現說橋接模式
橋接模式,初學的時候其實很不理解為什麼要把這個模式命名為橋接模式,腦海裡突然聯想到。其實我學習是一件比較痛苦的事情,因為我必須要知道來龍去脈才能學的進去,所以,很快我就對這個命名產生了興趣,橋接?
嗯,橋接!先把橋字換成連字,連線?橋接?橋接和連線最大的不同是橋接是降具有相同模式的兩種事物連線起來,這是我根據詞典的解釋得出的。
好吧,具有相同模式,瞬間便想到了介面,是不是有職業病?
將抽象部分與實現部分分離,使它們都可以獨立的變化。
——《設計模式》GOF
再結合GOF的設計模式說明,很容易就理解為什麼是命名為橋接。
抽象的是介面,實現的是類。
在我們的程式碼中,當傳入物件引數而不是基本資料型別引數的時候,我們有時候會傳入2種類型的引數。比如
public void menthd(List list)
public void method1(ArrayList arrayList)
這兩種有一個最大的區別,ArrayList 是 List 的實現類,當我們呼叫method方法的時候,你可以傳入的引數是ArrayList 和 LinkedList,但是呼叫第二種方法你只能傳入ArrayList,這樣很明顯就有缺陷了,當ArrayList不滿足我們需求的時候,我們必須要重寫一個method1方法,這樣對我們的程式碼結構是很不利,也違法了JAVA設計的開閉原則。
拿出這個我們寫出實際的程式碼,當然我們這裡不再用ArrayList做演示。。
先定義出介面
public interface TestInterface {
public void method();
}
再來一個實現類
public class TestInterfaceImpl1 implements TestInterface{
@Override
public void method() {
System.out.println("需求1");
}
}
呼叫類:
public class Bridge { public void test(TestInterfaceImpl1 impl1){ impl1.method(); } }
測試程式碼:
public class Test {
public static void main(String[] args) {
Bridge bridge = new Bridge();
TestInterfaceImpl1 impl1 = new TestInterfaceImpl1();
bridge.test(impl1);
}
}
輸出:需求1
然後,我們的需求改變,我們要將TestInterface 中method方法實現改為另一種需求2的實現方式,那麼你這裡需要修改的地方就比較多了。。。
必須要做的事情,新增實現類。
public class TestInterfaceImpl2 implements TestInterface{
@Override
public void method() {
System.out.println("需求2");
}
}
然後我們還需要修改Bridge,要新增一個方法去傳入TestInterfaceImpl2 的物件,改動原來的程式碼是我們最不願意看到的,當然你也可以新增一個介面卡類去實現,但是,如果當時我們的Bridge設計之初就不是這樣設計,而是傳入介面的引用物件呢?
將Bridge修改成
public class Bridge {
public void test(TestInterface impl){
impl1.method();
}
}
這樣,你出現新需求的時候就無需改動原先的程式碼。。
測試類:
public class Test {
public static void main(String[] args) {
Bridge bridge = new Bridge();
TestInterface impl1 = new TestInterfaceImpl1();
bridge.test(impl1);
TestInterface impl2 = new TestInterfaceImpl2();
bridge.test(impl2);
}
}
輸出:
需求1
需求2
這就是GOF所說的將抽象部分與實現部分分離,使它們都可以獨立的變化。
在這套程式碼中,抽象的是介面,將抽象的介面與實現部分分離,傳入的是向上引用的類物件,這樣你的實現類再怎麼改變對於整套程式碼都不會有任何影響。。。。。
這就是橋接模式!
面向物件,真不簡單!
相關推薦
菜鳥版JAVA設計模式-從抽象與實現說橋接模式
橋接模式,初學的時候其實很不理解為什麼要把這個模式命名為橋接模式,腦海裡突然聯想到。其實我學習是一件比較痛苦的事情,因為我必須要知道來龍去脈才能學的進去,所以,很快我就對這個命名產生了興趣,橋接? 嗯,橋接!先把橋字換成連字,連線?橋接?橋接和連線最大的不同是橋接是降具有相
設計模式之十八:橋接模式(Bridge)
ora 它的 pla sin string src ams down ng- 橋接模式: 將抽象部分和它的實現部分相分離開來,以使它們能夠單獨地變化。 UML圖: 主要包含: Abstraction:定義了抽象部分的接口。操作一個實現部分對
設計模式(十五)——橋接模式
不用 java 高層 ext 部分 獨立 lib 類型 ray 1.描述 將橋接部分與他的實現部分分離,是他們都可以獨立的變化。 2.模式的使用 ·抽象(Abstraction):是一個抽象類,該抽象類含有Implementor的聲明,即維護一個Implementor類型
設計模式(十八)橋接模式
橋接模式(Bridge),將抽象部分與他的實現部分分離,使他們都可以獨立地變化 類圖的來源 http://img5.imgtn.bdimg.com/it/u=1548947177,2280329040&fm=26&gp=0.jpg public abstract
【設計模式筆記】結構型--橋接模式
橋接(Bridge)模式 將抽象與實現部分分離,使得他們都可以獨立的變化。又稱為介面(Interface)模式 體現了單一職責、開閉、合成複用、里氏代換、依賴倒轉原則。 如何使用: 1、識別出一個類所具有的兩個獨立變化的維度,將他們設計成兩
23種設計模式之(十)橋接模式(python_c++實現)
23種設計模式之(十)橋接模式(Bridge) 本文主要介紹23種設計模式之組合模式,附詳細python/c++示例程式碼。 - 概念 - 應用場景 - 注意事項 - 程式碼示例 - 總結 - 程式碼連結 橋接模式(Bridge)
從JDBC規範談橋接模式
作者:叩丁狼教育,原創文章,轉載請註明出處。 JDBC是以統一方式訪問資料庫的API.它提供了獨立於平臺的資料庫訪問,也就是說,有了JDBC API,我們就不必為訪問Oracle資料庫專門寫一個程式,為訪問Sybase資料庫又專門寫一個程式等等,只需要用JDBC API寫
設計模式(十七)橋接模式
橋接模式(Bridge),將抽象部分與他的實現部分分離,使他們都可以獨立地變化 類圖的來源 public abstract class Implementor { public ab
設計模式(七):橋接模式
優點: ① 分離抽象介面及其實現部分。提高了比繼承更好的解決方案。 ② 橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴充套件一個維度,都不需要修改原有系統。 缺點: ① 橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發
Java實現橋接模式
22.2 緊耦合程式演化 兩個手機品牌,都有遊戲,兩個手機是不同的作業系統。怎麼寫? 該有一個父類手機品牌遊戲,讓N和M品牌手機遊戲都繼承它。 如果N和M品牌手機又都增加了通訊錄功能呢? 基於這個模型,那如果新增加一個手機品牌,並且每個手機品牌增
設計模式(十八)——橋接模式
橋接模式(Bridge) 橋接模式,將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 程式碼 1.程式碼如下: 手機軟體抽象類 using System; namespace Bridge
設計模式:橋接模式及程式碼示例、橋接模式在jdbc中的體現、注意事項
# 0、背景 加入一個手機分為多種款式,不同款式分為不同品牌。這些詳細分類下分別進行操作。 如果傳統做法,需要將手機,分為不同的子類,再繼續分,基本屬於一個龐大的多叉樹,然後每個葉子節點進行相同名稱、但是細節不同的功能實現。 **問題**: 1. **類爆炸**:類的增加基本沒有任何優
VMware虛擬機器三種網路模式詳解 Bridged(橋接模式)
由於Linux目前很熱門,越來越多的人在學習Linux,但是買一臺服務放家裡來學習,實在是很浪費。那麼如何解決這個問題?虛擬機器軟體是很好的選擇,常用的虛擬機器軟體有VMware Workstations和VirtualBox等。在使用虛擬機器軟體的時候,很多初學者都會遇到很
win10 VMware 虛擬機器 實現橋接模式 上網
前言: 可能很多朋友想用VMware在自己的windows系統上體驗下其它作業系統或者執行某些只能在Linux上的軟體。但是可能自己買阿里雲或者騰訊雲感覺划不來。下面我來簡單的來告訴大家,運用VMware的橋接模式,可以讓大家像擁有另外一臺不同作業系統的電腦一樣在區域網
【奔跑的菜鳥】Java的設計模式——裝飾模式
Java中有許多設計模式,本片文章通過一個簡化的裝飾模式的程式碼,實現一個簡單的裝飾模式。 package com.java; public interface Component { public void doSomething(); } package com.j
java語言登陸界面(菜鳥版)
pub oid box nts ring 實現 visible logs 更換 最近在看的Java入門書是《Head First》,一本很棒的Java書。 老師要求的程序流程圖我沒有,之前我們的做法是寫完代碼再畫流程圖,我想這樣的做法是不對的,流程圖應該是在寫代碼之前設計思
Java設計模式從精通到入門三 策略模式
介紹 我儘量用最少的語言解釋總結: Java23種設計模式之一,屬於行為型模式。一個類的行為或者演算法可以在執行時更改,策略物件改變context物件執行演算法。 應用例項: 以周瑜賠了夫人又折兵的例子。 uml類圖如下 主要程式碼如下 策略介面 /** * @ClassName S
《TCP IP詳解卷:協議 原書第2版》pdf附網盤下載連結+(附一個菜鳥的java學習之路)
技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的
《Hadoop權威指南大資料的儲存與分析第版修訂版升級版》pdf附網盤下載連結+(附一個菜鳥的java學習之路)
技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的
《Netty權威指南(第2版)》pdf附網盤下載連結+(附一個菜鳥的java學習之路)
技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的