日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 設計模式--適配器模式【 Adapter Pattern】

設計模式--適配器模式【 Adapter Pattern】

來源:程序員人生   發布時間:2016-02-29 16:57:55 閱讀次數:3296次

適配器模式,這個模式也很簡單,你筆記本上的那個拖在外面的黑盒子就是個適配器,1般你在中國能用,在日本也能用,雖然兩個國家的的電源電壓不同,中國是 220V,日本是 110V,但是這個適配器能夠把這些不同的電壓轉換為你需要的 36V 電壓,保證你的筆記本能夠正常運行,那我們在設計模式中引入這個適配器模式是否是也是這個意思呢?是的,1樣的作用,兩個不同接口,有不同的實現,但是某1天突然上帝命令你把 B 接口轉換為 A 接口,怎樣辦?繼承,能解決,但是比較傻,而且還背背了 OCP 原則,怎樣辦?好在我們還有適配器模式。

適配器的通用類圖是這個模樣滴:
這里寫圖片描述

Target 是1個類(接口) ,Adaptee 是1個接口,通過 Adapter 把 Adaptee 包裝成 Target 的1個子類(實現類) ,注意了這里用了個名詞包裝(Wrapper) ,那其實這個模式也叫做包裝模式(Wrapper),但是包裝模式可不知1個,還包括了以后要講的裝潢模式。我來說個自己的1個經驗,讓大家可以更容易了解這個適配器模式,否則純講技術太枯燥了,技術也能夠有文娛的嘛。

我在 2004 年的時候帶了1個項目,做1個人力資源管理,該項目是我們總公司發起的項目,公司1共有 700 多號人,包括子公司,這個項目還是比較簡單的,分為3大模塊:人員信息管理,薪酬管理,職位管理,其中人員管理這塊就用到了適配器模式,是怎樣回事呢?當時開發時明確的指明:人員信息簡管理的對象是所有員工的所有信息,然后我們就這樣設計了1個類圖:
這里寫圖片描述

還是比較簡單的,有1個對象 UserInfo 存儲用戶的所有信息(實際系統上還有很多子類,不多說了),也就是BO(Business Object) ,這個 UserInfo 對象,在系統中很多地方使用,你可以查看自己的信息,也能夠做修改,固然這個對象是有 setter 方法的,我們這里用不到就隱藏掉了。

這個項目是 04 年年底投產的,運行到 05 年年底還是比較安穩的,中間修修補補也很正常,05 年年底不知道是那股風吹的,很多公司開始使用借聘人員的方式招聘人員,我們公司也不例外,從1個人力資源公司借用了1大批的低技術、低工資的人員,分配到各個子公司,總共有將近 200 號人,然后就找我們部門老大談判,說要增加1個功能借用人員管理,老大1看有錢賺呀,1拍大腿,做!

我帶人過去1調研,不是這么簡單,人力資源公司有1套自己的人員管理系統,我們公司需要把我們使用到的人員信息傳輸到我們的系統中,系統之間的傳輸使用 RMI(Remote Method Invocation,遠程對象調用)的方式,但是有1個問題人力資源公司的人員對象和我們系統的對象不相同呀,他們的對象是這樣的:
這里寫圖片描述

人員資源公司是把人的信息分為了3部份: 基本信息, 辦公信息和個人家庭信息, 并且都放到了 HashMap中,比如人員的姓名放到 BaseInfo信息中,家庭地址放到 HomeInfo 中,這咱不好說他們系統設計的不好,那問題是咱的系統要和他們系統有交互,怎樣辦?使用適配器模式,類圖以下:
這里寫圖片描述

大家可能會問,這兩個對象都不在1個系統中,你如何使用呢?簡單!RMI 已幫我們做了這件事情,只要有接口,就能夠把遠程的對象當做本地的對象使用,這個大家有時間可以去看1下 RMI 文檔,不多說了。通過適配器,把 OuterUser 假裝成我們系統中1個 IUserInfo 對象,這樣,我們的系統基本不用修改甚么程序,所有的人員查詢、調用跟本地1樣樣的,說的口干舌燥,那下邊我們來看具體的代碼實現:

首先看 IUserInfo.java 的代碼:

public interface IUserInfo { //取得用戶姓名 public String getUserName(); //取得家庭地址 public String getHomeAddress(); //手機號碼,這個太重要,手機泛濫呀 public String getMobileNumber(); //辦公電話,1般式座機 public String getOfficeTelNumber(); //這個人的職位是啥 public String getJobPosition(); //取得家庭電話,這個有點缺德,我是不喜歡打家庭電話討論工作 public String getHomeTelNumber(); }

然后看這個接口的實現類:

public class UserInfo implements IUserInfo { /* * 取得家庭地址,下屬送禮也能夠找到地方 */ public String getHomeAddress() { System.out.println("這里是員工的家庭地址...."); return null; } /* * 取得家庭電話號碼 */ public String getHomeTelNumber() { System.out.println("員工的家庭電話是...."); return null; } /* * 員工的職位,是部門經理還是小兵 */ public String getJobPosition() { System.out.println("這個人的職位是BOSS...."); return null; } /* * 手機號碼 */ public String getMobileNumber() { System.out.println("這個人的手機號碼是0000...."); return null; } /* * 辦公室電話,煩躁的時候最好〔恍⌒摹把電話線踢掉,我常常這么干,對己對人都有好處 */ public String getOfficeTelNumber() { System.out.println("辦公室電話是...."); return null; } /* * 姓名了,這個老重要了 */ public String getUserName() { System.out.println("姓名叫做..."); return null; } }

可能有人要問了,為何要把電話號碼、手機號碼都設置成 String 類型,而不是 int 類型,大家覺的呢?題外話,這個絕對應當是 String 類型,包括數據庫也應當是 varchar 類型的,手機號碼有小靈通帶區號的,比如 02100001,這個你用數字怎樣表示?有些人要在手機號碼前加上 0086 后再保存,比如我們公司的印度阿3就是這樣,喜歡在手機號碼前 0086保存下來,呵呵,我是想到啥就說啥,

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 6080亚洲精品一区二区 | 日本 欧美 在线 | 97视频在线看 | 国产精品久久久免费视频 | 国产精品久久久av久久久 | 精品久久久久久综合日本 | 亚洲色图欧洲色图 | av九九| 亚洲一区二区三区免费视频 | 成人久久一区 | 久久久久国产精品免费免费搜索 | 91精品国产影片一区二区三区 | 国产一级色片 | 国产午夜视频在线观看 | 免费看a网站 | 国产一区二区三区久久久 | 欧美精三区欧美精三区 | 国产视频在线看 | 中国av免费在线观看 | 欧美三级黄色大片 | 日韩在线视频在线 | 日韩av电影在线播放 | 亚洲午夜激情电影 | 天堂网在线最新版www中文网 | 日韩免费一二三区 | 日本一区二区三区免费观看 | 在线日韩中文字幕 | 久久日韩精品 | 日韩亚洲| 欧美日韩国产精品 | 国产美女在线播放 | 久久成人在线视频 | 欧美精品午夜 | 欧美日韩国产综合在线 | 久久h | 国产91在线 | 中日 | 欧美精品三区 | 久久久久久久久久久一区二区 | 久久久久久免费毛片精品 | 久久久91精品国产一区老牛影视 | 日韩欧美字幕 |