摘要:適配器的適用場景代碼的復用性強。客戶端使用目標接口,與和目標接口一致的對象合作。被適配者一個現存需要適配的接口。適配器負責將的接口轉換為的接口。適配器是一個具體的類,這是該模式的核心。適配器分為類適配器和對象適配器兩種,下面將詳細講述。
適配器的適用場景
代碼的復用性強。
我們一直在使用適配器,如果 只有USB連接頭,無法將手機插到標準的插座上面充電 ,這時需要的一個適配器,一端接USB連接頭,另一端接插座
活動專題,例抽獎,固定的規則是充值有抽獎機會,但是突然來了一個需求說充值還要分享才能有抽獎機會,這時可以運用上這個設計模式
案例一(來自于php 設計模式 書) - 假設一個企業網站同時銷售軟件服務和軟件產品,目前所有的交易都在美國進行,后續業務決定向歐洲發展要增加貨幣換算(增加適配器)
案例二是自已設計于活動專題業務上,只是將邏輯摘取出來,代碼不可直接運行
優點靈活性擴展性都很好
將目標類和適配者類解耦
適配器所涉及的角色包括下面幾種:目標(Target):定義一個客戶端使用的特定接口。
客戶端(Client):使用目標接口,與和目標接口一致的對象合作。
被適配者(Adaptee):一個現存需要適配的接口。
適配器(Adapter):負責將Adaptee的接口轉換為Target的接口。適配器是一個具體的類,這是該模式的核心。
適配器分為類適配器和對象適配器兩種,下面將詳細講述。
來自 php 設計模式 一書的適配器設計模式案例**
/** * EuroCalc.php * 美元 - 能累加購買的服務和產品的價格 來自于php 設計模式 */ class DollarCalc { private $dollar; private $product; private $service; public $rate = 1; public function requestCalc($productNow,$serviceNow) { $this->product = $productNow; $this->service = $serviceNow; $this->dollar = $this->product + $this->service; return $this->requestCount(); } private function requestCount() { $this->dollar *= $this->rate; return $this->dollar; } } /** * EuroCalc.php * 歐元 - 能累加購買的服務和產品的價格 */ class EuroCalc { private $euro; private $product; private $service; public $rate = 1; public function requestCalc($productNow,$serviceNow) { $this->product = $productNow; $this->service = $serviceNow; $this->euro = $this->product + $this->service; return $this->requestCount(); } private function requestCount() { $this->euro *= $this->rate; return $this->euro; } } /** * 接口 ITarget.php */ interface ITarget { function requester(); } /** * 例:找一個合適的適配器來適合歐洲的插座一樣,以下就是創建這個適配器 * EuroAdapter 實現了一個接口又擴展了一個類 */ class EuroAdapter extends EuroCalc implements ITarget { public function __construct() { $this->requester(); } public function requester() { $this->rate = 0.8111; return $this->rate; } } /** * 用戶 */ class Client { private $euroRequest; private $dollarRequest; public function __construct() { $this->euroRequest = new EuroAdapter(); $this->dollarRequest = new DollarCalc(); $euros = "€"; echo "Euros:$euros".$this->makeAdapterRequest($this->euroRequest)."案例二 個人運用于自動化活動專題的接口設計
"; echo "dollar:".$this->makeDollarRequest($this->dollarRequest); } public function makeAdapterRequest(ITarget $req) { return $req->requestCalc(40,50); } public function makeDollarRequest(DollarCalc $req) { return $req->requestCalc(40,50); } } $worker = new Client();
抽獎例子(代碼只顯示對應的設計邏輯部分)
hd_info = ""; } public function _lottery() { // 實例 $lottery = new LotteryAdapter($hd_info); // 取得抽獎結果 $rs = $lottery->_getLotteryResult(); return $rs; } } namespace controller; use btsApp as BaseApp; /** * */ class LotteryAdapter extends AutoLottery implements ILottery { public function __construct($hd_info) { // 后臺配置是否需要使用適配器 if($hd_info["use_adapter"] === true) { $adapter_name = $hd_info["adapter_name"]; // $adapter_name = "adapter_name"; test $this->$adapter_name(); } } /** * adapter_name 該活動對應的適配器 */ private function adapter_name() { // 假設不符合自動化的需求條件是必須進入游戲后5分才可抽獎,增加適配器的該內容即可,從而不用重寫整個抽獎活動 $game_info = App::$app->model()->checkEnterGameInfo(); if(strtotime($info["TIME"]) - time() < 300) { $this->adapter_status = false; $this->adapter_code = -51; } } } namespace controller; use btsApp as BaseApp; /** * 自動化抽獎接口的基類 */ class AutoLottery { // 多帶帶開發條件的狀態 public $adapter_status = true; public $adapter_code = 0; public function _getLotteryResult(){ // 最后判斷適配器的狀態 if(!$this->adapter_status) { App::jetJsonpOutput($this->adapter_return_code); } // 業務邏輯判斷 // 通過則將數據入庫 $rs_status = App::$app->model()->insert($rs); // 返回結果 return $rs; } } ?>
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22579.html
.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body...
摘要:月日消息,近日,中國信息通信研究院大數據產品能力評測數據庫方向的測評結果陸續出爐。月日消息,國家工業信息安全發展研究中心發布電信行業數據庫產品第一期測評結果,前三名分別是阿里云數據庫柏睿數據企業級交易型數據庫信創版云和恩墨企業級數據庫。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-si...
摘要:用友網絡山東區作為推動山東企業上云的主力服務商,參展了此次活動。用友云,是用友時期的核心產品,致力于以平臺模式為企業提供社會化云服務助力企業數字化轉型。用友云幫助企業實現敏經營輕管理易金融簡,從而最終實現增長收入降低成本提高效率控制風險。3月7日上午,由濟南市經信委、市財政局與高新區機關黨委主辦的云行齊魯之濟南站暨高新區創新論壇在濟南禧悅東方酒店順利召開。本次活動是今年企業上云第一次重大活動...
摘要:掃描下方二維碼可觀看視頻回放,獲取講師合集活動回顧來自技術中臺研發部的安雪艷介紹了基于打造的技術平臺。未來英特爾將與一起,共同利用并發揮云原生的價值,為處在數字化型中的用戶,提供更加豐富的云化策略。 ...
摘要:徐亮厚稱,當前云原生已成為業務發展的一個重要引擎,年疫情更是加大了對的需求,拉動了大數據數據庫中間件人工智能的云原生化發展。未來英特爾將與一起,共同利用并發揮云原生的價值,為處在數字化型中的用戶,提供更加豐富的云化策略。 9月11日,由UCloud優刻得主辦的UCan技術開放日活動上,以構建云原生,擁抱新增長為主題,UCloud攜手達達集團、馭勢科技、企源科技以及英特爾等企業的云原生技術專...
閱讀 3494·2019-08-30 15:53
閱讀 3409·2019-08-29 16:54
閱讀 2197·2019-08-29 16:41
閱讀 2404·2019-08-23 16:10
閱讀 3382·2019-08-23 15:04
閱讀 1351·2019-08-23 13:58
閱讀 351·2019-08-23 11:40
閱讀 2457·2019-08-23 10:26