國慶假期最后一天了作彤,今天我們再來講一個設計模式昙读,命令模式膨桥。這個模式唠叛,相信各位程序員朋友都曾經使用過只嚣,只是你還有可能沒有理解它的核心思想艺沼。
這幾年隨著物聯網越來越發(fā)達,這種場景越來越常見了障般,我們可以通過語音來控制全家的家電调鲸,小米、華為藐石、阿里跟百度定拟,都是在這方面做的比較好的青自,通過一個智能音箱或者智能手機,可以隨便打開電視恋腕,開關空調等等逆瑞。那么,你有沒有想過這么一個問題车份,為什么這些物聯網的智慧中心知道如何去關閉你家的智能設備呢牡彻?在代碼上應該是什么樣的架構庄吼,如何進行設計呢?
我們我們知道,市面上的智能設備非常多轰坊,廠商也非常多祟印,每個廠商可能的標準都不一樣蕴忆,如果我們來開發(fā)一個物聯網智慧中心,我們不可能去學習所有廠商的API接口站蝠,學習他們的代碼菱魔,一來成本非常地高减牺,二來實現起來非常的復雜拔疚,即使是同一個廠商稚失,可能不同的設備都有不同的邏輯,開發(fā)成本巨大吸占。
這個時候就要祭出我們的設計模式了矾屯,命令模式。命令模式是一種數據驅動的設計模式孙技,它屬于行為型模式牵啦。它將請求封裝成對象妄痪,執(zhí)行者不用關心里面的具體實現邏輯衫生,只要進行執(zhí)行就可以了障簿。在現在的物聯網開放平臺上,也是這么實現的,廠商去對應的開放平臺上西篓,申請一個命令憋活,編寫相應的代碼悦即,至于物聯網智慧中心辜梳,它并不關心具體的代碼實現,只知道你家的智能空調綁定了這個命令茶宵,直接使用這個命令即可乌庶。
可能到這里你還有點懵,這講得都是什么玩意螃征。我們再通過一個耳熟能詳的例子会傲。相信大家都有使用過線程池的使用經驗拙泽。無論是JAVA也好顾瞻,C++也好荷荤,大多數的線程池都是這樣使用的。你創(chuàng)建一個類会油,去實現某一個接口翻翩,例如Java中的Runnable稻薇。然后你就可以將這個類放入線程池的隊列當中了塞椎。
這實際上就是一個典型的命令模式案狠,對于線程池來說,只關心線程的調度吹零,隊列的大小瘪校,線程數量這些,不用關心具體舉行的任務泣懊,只知道調用對應的執(zhí)行方法即可馍刮。對于命令本身窃蹋,只關心自身的邏輯警没,不用關心線程如何調度杀迹。這就非常好的將命令的請求者與命令的執(zhí)行者進行解耦了!
總結
好了树酪,今天我們學習了命令模式续语,是不是很親切疮茄,原來我們一直都在使用!歡迎大家關注我焚虱,共同學習,共同進步躯畴。大家的支持是我繼續(xù)嘮嗑的動力薇芝。同名公眾號(沙茶敏碎碎念)