國慶假期最后一天了,今天我們再來講一個設(shè)計模式,命令模式。這個模式,相信各位程序員朋友都曾經(jīng)使用過,只是你還有可能沒有理解它的核心思想。
這幾年隨著物聯(lián)網(wǎng)越來越發(fā)達,這種場景越來越常見了,我們可以通過語音來控制全家的家電,小米、華為、阿里跟百度,都是在這方面做的比較好的,通過一個智能音箱或者智能手機,可以隨便打開電視,開關(guān)空調(diào)等等。那么,你有沒有想過這么一個問題,為什么這些物聯(lián)網(wǎng)的智慧中心知道如何去關(guān)閉你家的智能設(shè)備呢?在代碼上應(yīng)該是什么樣的架構(gòu),如何進行設(shè)計呢?

我們我們知道,市面上的智能設(shè)備非常多,廠商也非常多,每個廠商可能的標準都不一樣,如果我們來開發(fā)一個物聯(lián)網(wǎng)智慧中心,我們不可能去學習所有廠商的API接口,學習他們的代碼,一來成本非常地高,二來實現(xiàn)起來非常的復雜,即使是同一個廠商,可能不同的設(shè)備都有不同的邏輯,開發(fā)成本巨大。
這個時候就要祭出我們的設(shè)計模式了,命令模式。命令模式是一種數(shù)據(jù)驅(qū)動的設(shè)計模式,它屬于行為型模式。它將請求封裝成對象,執(zhí)行者不用關(guān)心里面的具體實現(xiàn)邏輯,只要進行執(zhí)行就可以了。在現(xiàn)在的物聯(lián)網(wǎng)開放平臺上,也是這么實現(xiàn)的,廠商去對應(yīng)的開放平臺上,申請一個命令,編寫相應(yīng)的代碼,至于物聯(lián)網(wǎng)智慧中心,它并不關(guān)心具體的代碼實現(xiàn),只知道你家的智能空調(diào)綁定了這個命令,直接使用這個命令即可。
可能到這里你還有點懵,這講得都是什么玩意。我們再通過一個耳熟能詳?shù)睦印O嘈糯蠹叶加惺褂眠^線程池的使用經(jīng)驗。無論是JAVA也好,C++也好,大多數(shù)的線程池都是這樣使用的。你創(chuàng)建一個類,去實現(xiàn)某一個接口,例如Java中的Runnable。然后你就可以將這個類放入線程池的隊列當中了。
這實際上就是一個典型的命令模式,對于線程池來說,只關(guān)心線程的調(diào)度,隊列的大小,線程數(shù)量這些,不用關(guān)心具體舉行的任務(wù),只知道調(diào)用對應(yīng)的執(zhí)行方法即可。對于命令本身,只關(guān)心自身的邏輯,不用關(guān)心線程如何調(diào)度。這就非常好的將命令的請求者與命令的執(zhí)行者進行解耦了!
總結(jié)
好了,今天我們學習了命令模式,是不是很親切,原來我們一直都在使用!歡迎大家關(guān)注我,共同學習,共同進步。大家的支持是我繼續(xù)嘮嗑的動力。同名公眾號(沙茶敏碎碎念)