1. 程式人生 > >橋接模式(java實現)

橋接模式(java實現)

橋接模式

手機品牌MN都有遊戲和通訊錄功能,都用繼承實現,程式碼如下.

public  class Brand {

public void run() {}

}

public class MBrand extends Brand{

}

public class NBrand extends Brand{

}

public class MBrandGame extends MBrand{

public void run() {

System.out.println("執行M品牌手機遊戲");

}

}

public class NBrandGame extends NBrand{

public void

 run() {

System.out.println("執行N品牌手機遊戲");

}

}

//執行M品牌通訊錄

public class MBrandAddressList extends MBrand{

public void run() {

System.out.println("執行M品牌通訊錄");

}

}

public class NBrandAddressList extends NBrand{

public void run() {

System.out.println("執行N品牌通訊錄");

}

}

public class Demo1 {

public static void

 main(String[]args) {

Brand b;

b=new MBrandGame();

b.run();

b=new NBrandGame();

b.run();

b=new MBrandAddressList();

b.run();

b=new NBrandAddressList();

b.run();

}

}

輸出結果為

執行M品牌手機遊戲

執行N品牌手機遊戲

執行M品牌通訊錄

執行N品牌通訊錄

剛開始學會面向物件的繼承時,感覺它既新穎又功能強大,所以只要可以用,就都用上繼承.但事實上,很多情況用繼承會帶來麻煩.比如上面的程式碼,如果手機再增加’輸入法’,’拍照’,’音樂播放功能’,或者說再增加一個品牌

,更改起來會很麻煩.

合成/聚合複用原則

優先使用合成/聚合,儘量不要使用類繼承.因為繼承是一種強耦合的結構,父類變,子類就要變.所以我們在用繼承的時候,一定要在”is-a”的關係時再考慮使用,而不是在任何時候都用.

聚合表示一種”弱”的擁有關係,體現了A物件可以包含B物件(比如雁群包含大雁),但是B物件不是A物件的一部分;合成是一種強的擁有關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一致(比如說大雁和它的翅膀)

更改上面的程式碼:建立一個手機品牌抽象類和手機軟體抽象類,讓不同的品牌和功能都繼承它們

橋接模式

public abstract class Software {

public abstract void run();

}

public abstract class Brand {

protected Software software;

//設定手機軟體

public void setSoftware(Software software) {

this.software =software;

}

public abstract void run();

}

public class GameSoftware extends Software {

@Override

public void run() {

System.out.println("執行手機遊戲");

}

}

public class AddressListSoftware extends Software{

@Override

public void run() {

System.out.println("執行通訊錄功能");

}

}

public class MBrand extends Brand {

@Override

public void run() {

System.out.println("M品牌");

software.run();

}

}

public class NBrand extends Brand {

@Override

public void run() {

System.out.println("N品牌");

software.run();

}

}

public class Demo {

public static void main(String[]args) {

Brand br;

br=new MBrand();

br.setSoftware(new GameSoftware());

br.run();

br.setSoftware(new AddressListSoftware());

br.run();

br=new NBrand();

br.setSoftware(new GameSoftware());

br.run();

br.setSoftware(new AddressListSoftware());

br.run();

}

}

輸出結果為:

M品牌

執行手機遊戲

M品牌

執行通訊錄功能

N品牌

執行手機遊戲

N品牌

執行通訊錄功能

手機品牌和軟體是根據”一座橋”連線起來的,所以這個模式就叫做橋接模式

橋接模式:實現系統可能有多角度分類,每一種分類都可能有變化,那麼就把這種多角度分離出來讓它們獨立變化(而如果使用繼承會造成大量的類增加),減少它們之間的耦合.就剛才的例子而言,就是讓”手機”可以按照品牌來分類,也可以按照功能來分類

相關推薦

模式(java實現)

橋接模式 手機品牌M和N都有遊戲和通訊錄功能,都用繼承實現,程式碼如下. public  class Brand { public void run() {} } public class MBrand extends Brand{ } public class NBran

設計模式模式——Java語言描述

vat 有一個 .com pre color demo 靜態 red 實現 橋接適用於把抽象化和實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬於結構性模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦 這種模式設計到一個作為橋接的接口,使得實體類的功

07:模式——C++實現

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

模式-Bridge(Java實現)

技術分享 world java實現 () open() count end ring idg 橋接模式-Bridge 橋梁模式的用意是"將抽象化(Abstraction)與實現化(Implementation)脫耦, 將"類的功能層次結構" 與 "類的實現層次結構"分離為

Java實現模式

22.2 緊耦合程式演化 兩個手機品牌,都有遊戲,兩個手機是不同的作業系統。怎麼寫? 該有一個父類手機品牌遊戲,讓N和M品牌手機遊戲都繼承它。 如果N和M品牌手機又都增加了通訊錄功能呢? 基於這個模型,那如果新增加一個手機品牌,並且每個手機品牌增

菜鳥版JAVA設計模式-從抽象與實現模式

橋接模式,初學的時候其實很不理解為什麼要把這個模式命名為橋接模式,腦海裡突然聯想到。其實我學習是一件比較痛苦的事情,因為我必須要知道來龍去脈才能學的進去,所以,很快我就對這個命名產生了興趣,橋接? 嗯,橋接!先把橋字換成連字,連線?橋接?橋接和連線最大的不同是橋接是降具有相

Java設計模式應用——模式

com log reat hdfs service() rri 不同類 適合 reg 性能管理系統中,數據產生後需要經過采集,匯聚,入庫三個流程,用戶才能查詢使用。 采集可以是snmp采集,也可以是ems采集;匯聚可以使storm匯聚,也可以是spark匯聚;入庫可以是hd

Java二十三設計模式之-----模式

second his manager man @override end html con 太多的 一、橋接模式(Bridge) 橋接模式就是把事物和其具體實現分開,使他們可以各自獨立的變化。橋接的用意是:將抽象化與實現化解耦,使得二者可以獨立變化,像我們常用的JDBC橋

java設計模式-模式

送禮物 one dea setname auth imp ide span pro 1.背景                       追MM的例子,Boy追MM,需要送禮物Gift,有Flower,Ring繼承自Gift; 還有WarmGift溫暖的禮物,WildGif

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

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

Java進階篇設計模式之四 -----適配器模式模式

原則 pub 是我 protect 接口 logs 將不 多說 外鏈 前言 在上一篇中我們學習了創建型模式的建造者模式和原型模式。本篇則來學習下結構型模式的適配器模式和橋接模式。 適配器模式 簡介 適配器模式是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模

java面試題之----jdbc中使用的設計模式模式

connect @override 操作 tro orb his order ng- return 1.JDBC(JavaDatabase Connectivity) JDBC是以統一方式訪問數據庫的API. 它提供了獨立於平臺的數據庫訪問,也就是說,有了JDB

java設計模式5.組合模式、門面模式、享元模式模式

組合模式 在面向物件的語言中,樹結構有著巨大的威力,一個基於繼承的型別的等級結構便是一個數結構,一個基於合成的物件結構也是一個數結構。組合模式將部分與整體的關係用樹結構表示出來,使得客戶端把一個個單獨的成分物件和由它們組合而成的合成物件同等看待。 抽象構建角色:一個抽象角色,給參加組合的物

JAVA開發的23種設計模式之 --- 模式

橋接模式    概述:將抽象部分與他的實現部分分離,這樣抽象化與實現化解耦,使他們可以獨立的變化.如何實現解耦的呢,就是通過提供抽象化和實現化之間的橋接結構.    應用場景      &n

Java設計模式9:模式

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

重走Java設計模式——模式(Bridge Pattern)

橋接模式 定義 將抽象部分與實現部分分離,使它們都可以獨立的變化。 結構詳解 橋接模式主要包含如下幾個角色: 1.Abstraction:抽象類; 2.RefinedAbstraction:擴充抽象類; 3.Implementor:實現類介面; 4.Co

23種設計模式之(十)模式(python_c++實現

23種設計模式之(十)橋接模式(Bridge) 本文主要介紹23種設計模式之組合模式,附詳細python/c++示例程式碼。 - 概念 - 應用場景 - 注意事項 - 程式碼示例 - 總結 - 程式碼連結 橋接模式(Bridge)

《大話設計模式Java程式碼示例(十八)之模式

橋接模式(Bridge):將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 package bridge; /** * 橋接模式(Bridge) * 手機軟體抽象類 */ public abstract class PhoneSoft { pu

java 模式

橋接(Bridge)是用於把抽象化與實現化解耦,使得二者可以獨立變化,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。 1)介面卡:改變已有的兩個介面,讓他們相容。 2)橋接模式:分離抽象化和實現,使兩者的介面可以不同,目的是分離。 /** * @author liusongwei

JAVA設計模式(7):模式

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