摘要:適配器的適用場(chǎng)景代碼的復(fù)用性強(qiáng)??蛻舳耸褂媚繕?biāo)接口,與和目標(biāo)接口一致的對(duì)象合作。被適配者一個(gè)現(xiàn)存需要適配的接口。適配器負(fù)責(zé)將的接口轉(zhuǎn)換為的接口。適配器是一個(gè)具體的類,這是該模式的核心。適配器分為類適配器和對(duì)象適配器兩種,下面將詳細(xì)講述。
適配器的適用場(chǎng)景
代碼的復(fù)用性強(qiáng)。
我們一直在使用適配器,如果 只有USB連接頭,無(wú)法將手機(jī)插到標(biāo)準(zhǔn)的插座上面充電 ,這時(shí)需要的一個(gè)適配器,一端接USB連接頭,另一端接插座
活動(dòng)專題,例抽獎(jiǎng),固定的規(guī)則是充值有抽獎(jiǎng)機(jī)會(huì),但是突然來(lái)了一個(gè)需求說(shuō)充值還要分享才能有抽獎(jiǎng)機(jī)會(huì),這時(shí)可以運(yùn)用上這個(gè)設(shè)計(jì)模式
案例一(來(lái)自于php 設(shè)計(jì)模式 書) - 假設(shè)一個(gè)企業(yè)網(wǎng)站同時(shí)銷售軟件服務(wù)和軟件產(chǎn)品,目前所有的交易都在美國(guó)進(jìn)行,后續(xù)業(yè)務(wù)決定向歐洲發(fā)展要增加貨幣換算(增加適配器)
案例二是自已設(shè)計(jì)于活動(dòng)專題業(yè)務(wù)上,只是將邏輯摘取出來(lái),代碼不可直接運(yùn)行
優(yōu)點(diǎn)靈活性擴(kuò)展性都很好
將目標(biāo)類和適配者類解耦
適配器所涉及的角色包括下面幾種:目標(biāo)(Target):定義一個(gè)客戶端使用的特定接口。
客戶端(Client):使用目標(biāo)接口,與和目標(biāo)接口一致的對(duì)象合作。
被適配者(Adaptee):一個(gè)現(xiàn)存需要適配的接口。
適配器(Adapter):負(fù)責(zé)將Adaptee的接口轉(zhuǎn)換為Target的接口。適配器是一個(gè)具體的類,這是該模式的核心。
適配器分為類適配器和對(duì)象適配器兩種,下面將詳細(xì)講述。
來(lái)自 php 設(shè)計(jì)模式 一書的適配器設(shè)計(jì)模式案例**
/** * EuroCalc.php * 美元 - 能累加購(gòu)買的服務(wù)和產(chǎn)品的價(jià)格 來(lái)自于php 設(shè)計(jì)模式 */ 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 * 歐元 - 能累加購(gòu)買的服務(wù)和產(chǎn)品的價(jià)格 */ 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(); } /** * 例:找一個(gè)合適的適配器來(lái)適合歐洲的插座一樣,以下就是創(chuàng)建這個(gè)適配器 * EuroAdapter 實(shí)現(xiàn)了一個(gè)接口又?jǐn)U展了一個(gè)類 */ 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)."案例二 個(gè)人運(yùn)用于自動(dòng)化活動(dòng)專題的接口設(shè)計(jì)
"; 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();
抽獎(jiǎng)例子(代碼只顯示對(duì)應(yīng)的設(shè)計(jì)邏輯部分)
hd_info = ""; } public function _lottery() { // 實(shí)例 $lottery = new LotteryAdapter($hd_info); // 取得抽獎(jiǎng)結(jié)果 $rs = $lottery->_getLotteryResult(); return $rs; } } namespace controller; use btsApp as BaseApp; /** * */ class LotteryAdapter extends AutoLottery implements ILottery { public function __construct($hd_info) { // 后臺(tái)配置是否需要使用適配器 if($hd_info["use_adapter"] === true) { $adapter_name = $hd_info["adapter_name"]; // $adapter_name = "adapter_name"; test $this->$adapter_name(); } } /** * adapter_name 該活動(dòng)對(duì)應(yīng)的適配器 */ private function adapter_name() { // 假設(shè)不符合自動(dòng)化的需求條件是必須進(jìn)入游戲后5分才可抽獎(jiǎng),增加適配器的該內(nèi)容即可,從而不用重寫整個(gè)抽獎(jiǎng)活動(dòng) $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; /** * 自動(dòng)化抽獎(jiǎng)接口的基類 */ class AutoLottery { // 多帶帶開(kāi)發(fā)條件的狀態(tài) public $adapter_status = true; public $adapter_code = 0; public function _getLotteryResult(){ // 最后判斷適配器的狀態(tài) if(!$this->adapter_status) { App::jetJsonpOutput($this->adapter_return_code); } // 業(yè)務(wù)邏輯判斷 // 通過(guò)則將數(shù)據(jù)入庫(kù) $rs_status = App::$app->model()->insert($rs); // 返回結(jié)果 return $rs; } } ?>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/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...
摘要:月日消息,近日,中國(guó)信息通信研究院大數(shù)據(jù)產(chǎn)品能力評(píng)測(cè)數(shù)據(jù)庫(kù)方向的測(cè)評(píng)結(jié)果陸續(xù)出爐。月日消息,國(guó)家工業(yè)信息安全發(fā)展研究中心發(fā)布電信行業(yè)數(shù)據(jù)庫(kù)產(chǎn)品第一期測(cè)評(píng)結(jié)果,前三名分別是阿里云數(shù)據(jù)庫(kù)柏睿數(shù)據(jù)企業(yè)級(jí)交易型數(shù)據(jù)庫(kù)信創(chuàng)版云和恩墨企業(yè)級(jí)數(shù)據(jù)庫(kù)。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-si...
摘要:用友網(wǎng)絡(luò)山東區(qū)作為推動(dòng)山東企業(yè)上云的主力服務(wù)商,參展了此次活動(dòng)。用友云,是用友時(shí)期的核心產(chǎn)品,致力于以平臺(tái)模式為企業(yè)提供社會(huì)化云服務(wù)助力企業(yè)數(shù)字化轉(zhuǎn)型。用友云幫助企業(yè)實(shí)現(xiàn)敏經(jīng)營(yíng)輕管理易金融簡(jiǎn),從而最終實(shí)現(xiàn)增長(zhǎng)收入降低成本提高效率控制風(fēng)險(xiǎn)。3月7日上午,由濟(jì)南市經(jīng)信委、市財(cái)政局與高新區(qū)機(jī)關(guān)黨委主辦的云行齊魯之濟(jì)南站暨高新區(qū)創(chuàng)新論壇在濟(jì)南禧悅東方酒店順利召開(kāi)。本次活動(dòng)是今年企業(yè)上云第一次重大活動(dòng)...
摘要:掃描下方二維碼可觀看視頻回放,獲取講師合集活動(dòng)回顧來(lái)自技術(shù)中臺(tái)研發(fā)部的安雪艷介紹了基于打造的技術(shù)平臺(tái)。未來(lái)英特爾將與一起,共同利用并發(fā)揮云原生的價(jià)值,為處在數(shù)字化型中的用戶,提供更加豐富的云化策略。 ...
摘要:徐亮厚稱,當(dāng)前云原生已成為業(yè)務(wù)發(fā)展的一個(gè)重要引擎,年疫情更是加大了對(duì)的需求,拉動(dòng)了大數(shù)據(jù)數(shù)據(jù)庫(kù)中間件人工智能的云原生化發(fā)展。未來(lái)英特爾將與一起,共同利用并發(fā)揮云原生的價(jià)值,為處在數(shù)字化型中的用戶,提供更加豐富的云化策略。 9月11日,由UCloud優(yōu)刻得主辦的UCan技術(shù)開(kāi)放日活動(dòng)上,以構(gòu)建云原生,擁抱新增長(zhǎng)為主題,UCloud攜手達(dá)達(dá)集團(tuán)、馭勢(shì)科技、企源科技以及英特爾等企業(yè)的云原生技術(shù)專...
閱讀 3500·2019-08-30 15:53
閱讀 3414·2019-08-29 16:54
閱讀 2202·2019-08-29 16:41
閱讀 2412·2019-08-23 16:10
閱讀 3384·2019-08-23 15:04
閱讀 1355·2019-08-23 13:58
閱讀 355·2019-08-23 11:40
閱讀 2459·2019-08-23 10:26