【每日一記】設計模式——橋接模式
概述
- 意圖:將抽象部分與它的實現部分分離,使它們都可以獨立地變化
- 適用場景:某個類具有兩個或兩個以上的維度變化,如果只是用繼承將無法實現這種需要,則可以使用橋接模式
實現
以一個人做運動的例子進行說明,其中人和運動為可變唯獨:人可分為男人、女人,運動可分為游泳、跑步
// 運動抽象
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 --