1. 程式人生 > >【每日一記】設計模式——橋接模式

【每日一記】設計模式——橋接模式

概述

  • 意圖:將抽象部分與它的實現部分分離,使它們都可以獨立地變化
  • 適用場景:某個類具有兩個或兩個以上的維度變化,如果只是用繼承將無法實現這種需要,則可以使用橋接模式

實現

以一個人做運動的例子進行說明,其中人和運動為可變唯獨:人可分為男人、女人,運動可分為游泳、跑步

// 運動抽象
public interface Sport {
    String doSport();
}
// 游泳,具體運動
public class Swimming implements Sport {
    @Override
    public String doSport() {
        return
"swimming"; } } // 跑步,具體運動 class Running implements Sport { @Override public String doSport() { return "running"; } }
// 人的抽象
public abstract class Person {
    private Sport sport;

    public Sport getSport() {
        return sport;
    }

    public void setSport(Sport sport) {
        this
.sport = sport; } public abstract void sport(); } // 男人 public class Man extends Person { @Override public void sport() { System.out.println("Man is " + getSport().doSport()); } } // 女人 class Woman extends Person { @Override public void sport() { System.out.println("Woman is "
+ getSport().doSport()); } }
// 客戶端
public class Client {
    public static void main(String[] args) {
        Sport swim = new Swimming();
        Sport run = new Running();
        // 男人進行遊泳和跑步
        Person man = new Man();
        man.setSport(swim);
        man.sport();
        man.setSport(run);
        man.sport();
        // 女人進行遊泳和跑步
        Person woman = new Woman();
        woman.setSport(swim);
        woman.sport();
        woman.setSport(run);
        woman.sport();
    }

}

通過橋接模式通過組合關係代替繼承,使得人和運動只依賴其抽象而非具體實現,從而使兩個可變維度可以獨立的變換

實際應用

java.util.logging.Handler和java.util.logging.Formatter

類圖

相關推薦

每日設計模式——模式

概述 意圖:將抽象部分與它的實現部分分離,使它們都可以獨立地變化 適用場景:某個類具有兩個或兩個以上的維度變化,如果只是用繼承將無法實現這種需要,則可以使用橋接模式 實現 以一個人做運動的例子進行說明,其中人和運動為可變唯獨:人可分為男人、女人,運

每日設計模式——代理模式

概述 定義:為其他物件提供一種代理以控制對這個物件的訪問 適用場景: 遠端代理:為一個物件在不同的地址空間提供區域性代表。這樣可以隱藏一個物件存在於不同地址空間的事實 虛擬代理:根據需要建立開銷很大的物件。通過它來存放例項化需要很長時間的真實物件 安全代理

每日設計模式——中介者模式

概述 定義:定義一箇中介物件來封裝系列物件之間的互動。 適用場景: 一組定義良好的物件,現在要進行復雜的通訊 定製一個分佈在多個類中的行為,而又不想生成太多的子類 實現 // 同事類 p

每日設計模式——開篇

寫在最前 未曾清貧難成人,不經打擊老天真。 自古英雄出煉獄,從來富貴入凡塵。 醉生夢死誰成氣,拓馬長槍定乾坤。 揮軍千里山河在,立名揚威傳後人。 沒有夢想和鹹魚有什麼區別,沒有技術光有夢想又有何用,所以從今天起開個系列記錄自己

(轉載)[海莉zhe] 每日Unity3D 實戰練習-實現物體的映象 (十四)

http://www.manew.com/thread-140831-1-1.html     最近在學習如何實現物體的映象,練習了一個簡單的例子,然後和大家一起探討一下哈!物體映象的操作實際上是通過一個模型的MeshFilter 和 MeshRenderer 來獲取

設計模式筆記結構型--模式

橋接(Bridge)模式   將抽象與實現部分分離,使得他們都可以獨立的變化。又稱為介面(Interface)模式        體現了單一職責、開閉、合成複用、里氏代換、依賴倒轉原則。 如何使用:   1、識別出一個類所具有的兩個獨立變化的維度,將他們設計成兩

每日

意義 什麽 就是 自己 有意 地方 別人 現實 有時 每日一悟 【做“該”做的,不做“不該”做的】 有時候你覺得盡心盡力,別人根本不懂; 有時候你覺得付出很多,但 是在對其他部門付出,自己部門的人看不見,一樣沒有意義。 所以現實就是,不要在別人看不到的地方做事。 如果看不到

每日數據倉庫之全量表、增量表、拉鏈表、流水表

水表 打開 tails 開始 當我 net 最大的 閱讀 增量 每日一悟 數據倉庫之全量表、增量表、拉鏈表、流水表 背景 從使用MySQL階段,到前陣子跳槽到新公司開始使用hive,面對的表變多,數據量也完全超過之前。基本是隨便核查個問題都已經不是Excel能承擔得起的了

每日wehome增長數字

思維 大會 新產品 受限 方法 深圳 產品 需要 是不是 每日一悟 airbnb增長數字 這周在做新產品的數據體系規劃,越寫下去越覺著思維受限。找到了一點框架的感覺,但總是覺著不夠,畢竟事務總是在變化的,而我不知道我所掌握的是不是夠先進。另一方面,對於特殊關鍵點也在費勁心

每日python-logistics回歸

gis 目的 碎片 python 想想你 自己的 是不是 logistic 小時 每日一悟 【每天都想想你的目標是什麽】 工作時,雖然沒什麽成就,但總是感覺忙得得不了閑。 像這種單雙休每天早十晚八點半的日子,再加上通勤倆個多小時,待在家的時間就只剩下早八點半前,晚上十點後。

每日裝飾器

count 其他 用戶登陸 glob 每日一練 div class 密碼 try 寫一個用戶登錄認證函數,要求: 1.要求用戶輸入賬號密碼和txt中的用戶名數據庫對比; 2.要求用戶有三次嘗試機會; 3.要求用戶登陸後,執行其他功能無需再驗證; txt數據: {‘auth_

每日獎金問題

一:問題描述 二:問題分析     涉及資料:利潤profit,獎金bonus     資料間的關係:當profit<=10w,bonus = pro

每日

題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? 程式碼: num = 0 for i in range(1,5): for a in range(1,5): for b in range(1,5):

每日百元買百雞問題

問題描述: 雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何? Python版 for i in range(0,20): #公雞最多買20只 for x in range(0,33):

每日Java 基本資料型別基礎面試題

原文作者資訊 作者:工匠若水 公眾號: 碼農每日一題 (1)問:如下程式語句有什麼問題嗎? short s1 = 1;s1 = s1 + 1;    //1short s2 = 1;s2 +

每日P魔術橡皮擦摳圖工具的使用

Ps一鍵摳圖。主要用到魔術橡皮擦工具和圖層混合模式引數設定。 素材如下: 效果圖如下: 第一步:Ctrl+O開啟飛機素材,回到工具欄,開啟魔術橡皮擦工具,點選飛機背景圖層,摳圖效果就出來了,效果如下: 第二步:我們可以看到背景層還沒有完全

每日查詢一個字串中第一個只出現兩次的字元

題目:查詢一個字串中第一個只出現兩次的字元。比如:“abcdefabcdefabc”中第一個只出現兩次為‘d’,要求時間複雜度為O(N),空間複雜度為O(1) 解決方法:可以使用雜湊表統計每個字元出現的次數。因為字元只有256種可能,所以我們可以申請一個25

2014年12月4日每日SOAP、WSDL、UDDI這三者有什麼區別和聯絡?

【答】 Web Service平臺有三種元素構成:SOAP、WSDL、UDDI。 一個消費者可以在UDDI登錄檔查詢服務,取得服務的WSDL描述,然後通過SOAP來呼叫服務。 SOAP、WSDL、UDDI的區別如下: 1. SOAP(Simple Object Access Protocol,簡單物件訪問協議

linux系列centos7配置模式靜態IP

一、設定橋接模式VMware->Edit->Virtual Network Edit二、檢視物理機的ip地址三、根據物理機的ip地址,設定linux虛擬機器的ip地址IPADDR跟IPv4要在同一網段即前三位一樣,GATEWAY跟主機一樣 DNS可通過檢視主機DN

每日基本資料型別與包裝型別的面試題

基礎知識:1、java中的基本資料型別  java是一個近乎純潔的面向物件程式設計語音,引入基本資料型別是為了程式設計方便,但是為了能夠將這些基本資料型別當成物件操作,java為每一個基本資料型別引入了對應的包裝型別(wrapper class)。具體如下:  int  --