一看就懂!【英雄聯(lián)盟銳雯】與 Python 詳解設(shè)計(jì)模式之門面模式

      網(wǎng)友投稿 597 2025-03-31

      設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式的目的:為了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。設(shè)計(jì)模式使代碼編***正工程化;設(shè)計(jì)模式是軟件工程的基石脈絡(luò),如同大廈的結(jié)構(gòu)一樣。

      通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發(fā)人員經(jīng)過相當(dāng)長(zhǎng)的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來的。

      設(shè)計(jì)模式有很多中,但可以把它們歸為三類:

      創(chuàng)建型設(shè)計(jì)模式

      結(jié)構(gòu)型設(shè)計(jì)模式

      行為型設(shè)計(jì)模式

      而 “門面模式” (也稱外觀模式)也是眾多設(shè)計(jì)模式的一種,它屬于結(jié)構(gòu)型設(shè)計(jì)模式。

      什么是門面模式(Facade)?

      為子系統(tǒng)中的一組接口提供一個(gè)一致的界面

      Facade 模式定義了一個(gè)高層接口,這個(gè)接口使得這子系統(tǒng)更加容易使用。

      什么時(shí)候需要使用門面模式?

      在以下情況下可以考慮使用外觀模式:

      (1)設(shè)計(jì)初期階段,應(yīng)該有意識(shí)的將不同層分離,層與層之間建立外觀模式。

      (2) 開發(fā)階段,子系統(tǒng)越來越復(fù)雜,增加外觀模式提供一個(gè)簡(jiǎn)單的調(diào)用接口。

      (3) 維護(hù)一個(gè)大型遺留系統(tǒng)

      門面模式解決了什么問題?

      (1)實(shí)現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系。

      (2)客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對(duì)象數(shù)目,并使得子系統(tǒng)使用起來更加容易。

      這不是 S8 剛過,蹭一波 IG牛批 的熱度,我們通過英雄聯(lián)盟的角色 -- 銳雯,來理解門面模式。我是一名爬蟲工程師,常用 Python ,所以接下來的代碼演示部分將采用 Python 來編寫。

      為什么選擇銳雯?

      因?yàn)殇J雯的技能很適合講解門面模式。

      大家都知道 IG.theshy 的成名英雄不是劍魔而是銳雯。

      他在打職業(yè)之前是韓服第一銳雯,操作簡(jiǎn)直 666。

      銳雯基本操作是什么?

      光速 QA 的連招順序?yàn)椋篈-Q-地板-A-Q-地板-A-Q-地板-A, 一套傷害打下來是很猛的,今天我們就以銳雯的光速 QA 作為例子,來看看設(shè)計(jì)模式中的門面模式是怎么回事。

      我可以選擇其它英雄么?

      當(dāng)然可以,你可以選擇你擅長(zhǎng)的英雄來理解門面模式,這并不影響你收割知識(shí)。

      光速 QA 的過程

      都聽過光速 QA,但是你了解它的過程么?A Q A Q A Q A 就完事了?

      要是這樣,那就很簡(jiǎn)單了,事實(shí)上英雄聯(lián)盟有施法技能前搖動(dòng)畫和后搖動(dòng)畫,就是因?yàn)檫@些動(dòng)畫影響了英雄在技能釋放時(shí)的連貫性,而光速 QA 就是利用人物移動(dòng)的操作來抵消技能的前搖和后搖動(dòng)畫。我們來看一看,光速 QA 的過程是什么:

      1.首先平 A 一下敵人; 2.以最快的速度接 Q 技能; 3.接著飛速點(diǎn)擊一下地板; 4.最后神速的將鼠標(biāo)移動(dòng)到回你要攻擊的目標(biāo)上。

      上面是光速 QA 的第一段操作,它需要你操作 4 次,而光速 QA 總共有 3 段,意味著你要將上面的操作循環(huán) 3 次,總共就是 12 次操作。

      這也就是為什么,只要練成了銳雯的光速 QA ,就能夠在短時(shí)間內(nèi)打出爆發(fā)性的傷害,讓對(duì)面的上單心慌慌...

      用 Python 代碼表示光速 QA

      說明一下,代碼是用來表示過程以及比喻技能的(杠精請(qǐng)繞道),介紹一下,英雄聯(lián)盟的英雄技能按鍵分布在 Q-W-E-R 四個(gè)鍵,所以游戲中大家將各個(gè)技能的名稱簡(jiǎn)述為 Q 技能、W 技能、E 技能、R 技能,這里我們還需要鍵盤和鼠標(biāo)的操作。

      Python 代碼表示鍵盤技能

      class?KeyBoard(object):?????"""?鍵盤?"""?????def?keyboard_q(self):?????????#?Q?技能?????????print("釋放?Q?技能")?????def?keyboard_w(self):?????????#?W?技能?????????print("釋放?W?技能")?????def?keyboard_e(self):?????????#?E?技能?????????print("釋放?E?技能")?????def?keyboard_r(self):?????????#?R?技能?????????print("釋放?R?技能")??????復(fù)制代碼

      Python 代碼表示鼠標(biāo)操作

      class?Mouse(object):????def?mouse_left_click(self):????????#?鼠標(biāo)左鍵????????print("鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊")????def?mouse_right_click(self):????????#?鼠標(biāo)右鍵????????print("鼠標(biāo)右鍵點(diǎn)擊?1?次,?點(diǎn)擊地面")?復(fù)制代碼

      這樣就構(gòu)成了最基本的技能和鼠標(biāo)基礎(chǔ)操作。

      接下來我們使用銳雯的第一段 QA 操作:

      if?__name__?==?"__main__":?????keyboard?=?KeyBoard()?????mouse?=?Mouse()?????#?接下來開始使用光速?QA?操作的第一輪:?A->?Q->?地板->?A?????mouse.mouse_left_click()??#?A?????keyboard.keyboard_q()??#?Q?????mouse.mouse_right_click()??#?地板?????mouse.mouse_left_click()??#?A?復(fù)制代碼

      第一段 QA 操作

      運(yùn)行這段代碼,我們就可以實(shí)現(xiàn)銳雯的第一段 QA 操作:

      鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?釋放?Q?技能?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?釋放?Q?技能?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?釋放?Q?技能?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?復(fù)制代碼

      如果需要 3 段 QA 操作,那么就將上方的代碼復(fù)制三份。

      光速 QA 快捷鍵與門面模式

      一看就懂!【英雄聯(lián)盟銳雯】與 Python 詳解設(shè)計(jì)模式之門面模式

      英雄聯(lián)盟有快捷鍵的,可以讓你簡(jiǎn)單的使出光速 QA 操作,那么這個(gè)快捷鍵我們就可以理解為 “門面模式”。快捷鍵將這些操作歸納起來,你只需要設(shè)置好快捷鍵,就能夠一次性使出光速 QA。門面模式 UML 圖為:

      門面模式的光速 QA 代碼

      將圖形轉(zhuǎn)化為實(shí)際的代碼,首先保持原來的鍵盤和鼠標(biāo)操作不變:

      class?KeyBoard(object):?????"""?鍵盤?"""?????def?keyboard_q(self):?????????#?Q?技能?????????print("釋放?Q?技能")?????def?keyboard_w(self):?????????#?W?技能?????????print("釋放?W?技能")?????def?keyboard_e(self):?????????#?E?技能?????????print("釋放?E?技能")?????def?keyboard_r(self):?????????#?R?技能?????????print("釋放?R?技能")?class?Mouse(object):?????def?mouse_left_click(self):?????????#?鼠標(biāo)左鍵?????????print("鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊")?????def?mouse_right_click(self):?????????#?鼠標(biāo)右鍵?????????print("鼠標(biāo)右鍵點(diǎn)擊?1?次,?點(diǎn)擊地面")?復(fù)制代碼

      接著通過定義一個(gè) Facade 類,將原來的鍵鼠操作組成一套連招:

      class?Facade(object):?????"""?門面模式?"""?????def?__init__(self):?????????self.keyboard?=?KeyBoard()?????????self.mouse?=?Mouse()?????def?quick_attack(self):?????????#?快速攻擊?????????self.mouse.mouse_left_click()??#?A?????????self.keyboard.keyboard_q()??#?Q?????????self.mouse.mouse_right_click()??#?地板?????????self.mouse.mouse_left_click()??#?A?復(fù)制代碼

      再編寫一個(gè)召喚師,讓召喚師對(duì) Facade (可以將 Facade 理解為英雄聯(lián)盟的快捷鍵)進(jìn)行操作:

      class?Client(object):?????def?__init__(self):?????????print("斷劍重鑄之日?騎士歸來之時(shí)")?????def?combo(self):?????????#?技能連招?????????operation?=?Facade()?????????operation.quick_attack()?????def?moves(self):?????????print("走位移動(dòng)")?復(fù)制代碼

      為了更貼近真實(shí)操作,我們還可以為召喚師增加走位功能。

      至此,門面模式所需的類和代碼都編寫完了,我們來看看召喚師如何使用:

      if?__name__?==?"__main__":?????client?=?Client()??#?召喚師?????#?召喚師?釋放連招?-?調(diào)整走位?-?釋放連招?-?調(diào)整走位?-?釋放連招?????client.combo()?????client.moves()?????client.combo()?????client.moves()?????client.combo()?復(fù)制代碼

      以上就完成了 3 段 QA 操作,運(yùn)行一下代碼,看看會(huì)發(fā)生什么:

      斷劍重鑄之日?騎士歸來之時(shí)?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?釋放?Q?技能?鼠標(biāo)右鍵點(diǎn)擊?1?次,?點(diǎn)擊地面?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?走位移動(dòng)?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?釋放?Q?技能?鼠標(biāo)右鍵點(diǎn)擊?1?次,?點(diǎn)擊地面?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?走位移動(dòng)?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?釋放?Q?技能?鼠標(biāo)右鍵點(diǎn)擊?1?次,?點(diǎn)擊地面?鼠標(biāo)左鍵點(diǎn)擊?1?次,?A?攻擊?復(fù)制代碼

      是不是完成了所有的連招操作,形成了光速 QA 呢(杠精請(qǐng)繞路)?

      寫法對(duì)比

      回顧一下常規(guī)寫法,有鍵盤、鼠標(biāo),召喚師釋放 1 段 QA 操作需要共 4 步,它們之間的關(guān)系如下圖所示:

      那么 3 段 QA 就需要 3 組

      而門面模式的寫法,則是將所需的一組復(fù)雜操作封裝起來,從而為外部的召喚師提供一個(gè)舒適、簡(jiǎn)單的操作,它由門面、客戶端(召喚師)、一組系統(tǒng)(Q、A 以及鼠標(biāo)左/右鍵操作)三部分組成,像下圖所繪,每一組操作包裹在 Facade 中,召喚師需要釋放連招只需要調(diào)用 1 次 Facade 即可。

      用 UML 圖表示他們的關(guān)系:

      關(guān)注公眾號(hào),可以領(lǐng)取上方所用代碼及 UML 圖

      你還能聯(lián)想到哪一些英雄呢?那些英雄的技能是不是也可以用設(shè)計(jì)模式來理解?

      請(qǐng)?jiān)谖恼孪路搅粞裕纯茨阆矚g哪個(gè)英雄多一點(diǎn)。

      軟件開發(fā) Python

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel工作簿快速刪除空白行
      下一篇:我使用PDF轉(zhuǎn)word,轉(zhuǎn)換成功后沒有任何東西(word沒法轉(zhuǎn)成pdf)
      相關(guān)文章
      亚洲免费日韩无码系列 | 国产亚洲一区二区三区在线| 国产精品亚洲lv粉色| 亚洲精品无码少妇30P| 亚洲中文字幕无码亚洲成A人片| 亚洲国产成人精品无码一区二区| 亚洲精彩视频在线观看| 久久久久亚洲AV成人片| 亚洲美女自拍视频| 亚洲免费在线视频播放| 亚洲va乱码一区二区三区| jlzzjlzz亚洲jzjzjz| 亚洲一区二区三区免费观看| 亚洲三级视频在线| 亚洲天堂一区二区三区| 2020久久精品亚洲热综合一本| 亚洲1234区乱码| 亚洲人成色在线观看| MM1313亚洲国产精品| 亚洲А∨精品天堂在线| 爱情岛论坛网亚洲品质自拍| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲精品无码MV在线观看| 亚洲AV无码不卡无码| 久久精品视频亚洲| 亚洲自偷精品视频自拍| 亚洲av无码国产综合专区| 亚洲精品国产摄像头| 五月婷婷亚洲综合| 一本久久a久久精品亚洲| 亚洲AV永久无码精品一百度影院 | 亚洲 欧洲 自拍 另类 校园| 亚洲国产精品无码中文lv| 亚洲av午夜精品一区二区三区| 国产啪亚洲国产精品无码| 亚洲av最新在线网址| 亚洲白色白色在线播放| 亚洲一卡2卡三卡4卡无卡下载| 男人的天堂亚洲一区二区三区 | 精品亚洲成α人无码成α在线观看| 国产亚洲精品高清在线|