在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

宋寶華:一種非常經典簡單的設計模式——模板方法

Linux閱碼場 ? 來源:lq ? 2019-01-14 16:05 ? 次閱讀

前言

《設計模式》這本經典的書里面定義了20多種設計模式,雖然都是面向對象的,似乎需要C++Java這樣的語言才能實現,但是根據筆者前面反復強調的,Linux內核雖然是用C語言匯編語言寫成,但是其實也到處充滿了面向對象的設計。面向對象更多的是一種思想,而不是一個語言。我們可以用C語言實現極大的OO,Linux內核到處都有OO。

模板方法

比如,在Linux的設備驅動框架中,就用了一種非常經典簡單的設計模式——模板方法(Template Method),當然還有一些其他的設計模式。而設計模式牛逼的地方在于,高手往往不經意之間已經用到了設計模式,甚至自己都不知道。如果高手沒有系統地學習過設計模式,這其實不見得是一個問題。這并不意味著它不懂設計模式,只是他自己都不知道自己用到了哪個模式。而設計模式學習的終極目的,當然也是忘記設計模式,這個跟練獨孤九劍沒什么區別,到最后其實是無招勝有招。

模板方法這個模式,強調定義一個基類,這個基類實現了通用的流程和算法。比如做一件事情需要經過step1()、step2()、step3()。那么我們定義一個基類:

而其中的step1()、step2()、step3()、step4()具體如何實現則是因人而異,所以我們從baseClass類里面,繼承出來的類里面,實現step1()、step2()、step3()這樣的代碼,override掉baseClass里面的函數。

這樣的設計讓外部不關心derivedClass,因為流程和接口都是在基類的。而基類實現的doSomething()成員函數,是對外的接口。這個UML關系是非常簡單的:

驅動案例

在Linux設備驅動里面,大量存在類似的設計,我們以NAND為例子。在drivers/mtd/nand/nand_base.c這層里面,定義了NAND的一些操作流程。

比如寫OOB的代碼:

它這個里面要走cmdfunc()、write_buf()、cmdfunc()、waitfunc()這些步驟,這些步驟,不管是全世界哪個NAND的硬件,都是一樣的通用的,但是具體的不同的NAND硬件控制器,實現這些步驟中涉及到的cmdfunc()等函數的實現方法卻因人而異。

譬如freescale的版本fsl_elbc_nand.c就是:

nand_base.c這個C文件是NAND的中間層,它非常類似我們前面說的實現baseClass這一層的代碼,nand_write_oob_std函數類似baseClass :: doSomething。而Linux驅動中定義的nand_chip的各個不同的NAND控制器,對nand_chip這個結構體中成員函數cmdfunc()、write_buf()等的實現則是各異的,類似derivedClass里面override掉step1()、step2()。nand_chip定義在include/linux/mtd/nand.h:

這樣的設計,好處是非常明顯的。特定的硬件只用管與自身操作相關的事情,而通用的流程,都由nand_base搞定,最大程度上減小了具體實例的代碼量,也最大程度上復用了中間層的代碼。

這樣的例子無處不在,比如我們在LCD的中間層:

后語

本文后語不搭前言,請見諒。最近有很多童鞋詢問筆者,做Linux驅動有沒有前途?筆者明確地告訴大家:根本沒有前途!但是前途是自己賺的,這依賴你從驅動進去,但是從更大的視角出來:

1.通過做驅動理解很多OO的架構設計思想,升華自己高內聚和低耦合的理解,把自己變成一個更高level的software engineer;

2.通過做驅動,進一步理解Linux本身的進程、內存、IO等知識,升華對軟件系統和性能分析的理解,把自己變成一個更高level的技術expert。

如果做了5年驅動,進入的時候是調試寄存器示波器,出來的時候還是調寄存器搞示波器,那自然是完全沒有什么前途的!

有沒有前途,這個事情,完全是因人而異的。前途是無所謂有,無所謂無的。你如果有抽象、衍生的能力和不斷學習總結的精神,無論是做驅動還是不做驅動,都會是很有前途的事情。反之,做什么基本都沒前途。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11320

    瀏覽量

    209849
  • C語言
    +關注

    關注

    180

    文章

    7608

    瀏覽量

    137126

原文標題:宋寶華:Linux設備驅動框架里的設計模式之——模板方法(Template Method)

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一種簡單的可控硅好壞判斷方法

    一種簡單的可控硅好壞判斷方法
    發表于 07-28 08:17 ?6300次閱讀

    一種簡單的OpenHarmony環境搭建方法

    本文介紹一種簡單的OpenHarmony環境搭建方法
    的頭像 發表于 03-14 13:58 ?3443次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>簡單</b>的OpenHarmony環境搭建<b class='flag-5'>方法</b>

    一種簡單的逆變器輸出直流分量消除方法

    逆變器輸出直流分量會對逆變器本身和交流負載產生不利影響,必須消除直流分量來保障逆變器的可靠運行。提出了一種簡單的消除輸出直流分量的方法,并在理論分析的基礎上,通過對1臺220V、1 kW的逆變器系統
    發表于 12-27 11:20

    清遠見教程

    《Linux按鍵和LCD設備驅動》主講老師:清遠見企業學院講師,視頻要點:1、Linux按鍵和觸摸屏驅動和應用編程;2、LinuxLCD驅動和應用編程。《Linux按鍵和LC
    發表于 04-10 11:48

    _精通LINUX設備驅動開發

    的這本書就不要我介紹了。
    發表于 07-06 21:03

    一種改進的自適應模板匹配法

    本文提出了一種基于數據流修正的自適應模板匹配定位方法。該方法首先在圖像預處理的基礎上,進行模板匹配,從而定位待識別目標;然后采用數據流修正的
    發表于 08-17 08:05 ?21次下載

    模板方法模式在回溯算法中的應用

    描述了模板方法模式及回溯算法的模板方法模式的Java 語言實現,該實現使得回溯算法的實現達到了可
    發表于 01-15 16:51 ?0次下載

    STEP模式映射的一種實用方法

    STEP模式映射的一種實用方法 在STEP標準的應用中, 常需要通過不同STEP應用協議之間或其中某應用協議的不同視圖之間的映射來實現異構系統間的數據交換。本文提
    發表于 02-22 14:37 ?10次下載

    基于模板匹配的電子元器件針腳檢測方法

    相關系數法模板匹配是數字攝影檢測中的一種經典的基于灰度的匹配方法。提出了一種基于模板匹配的電子器
    發表于 08-02 14:12 ?19次下載

    一種基于STM32的SMS短消息收發系統_

    一種基于STM32的SMS短消息收發系統_
    發表于 01-14 22:32 ?0次下載

    一種針對DoT算法的模板攻擊方法

    模板攻擊是一種重要的側信道分析方法,其在實際密碼算法破譯中具有較強的區分能力。輕量級分組密碼算法DoT在硬件和軟件實現中都表現岀優秀的性能,盡管目前針對DoT算法的傳統數學攻擊已經取得了
    發表于 03-21 10:34 ?8次下載
    <b class='flag-5'>一種</b>針對DoT算法的<b class='flag-5'>模板</b>攻擊<b class='flag-5'>方法</b>

    一種針對DoT算法的模板攻擊方法

    模板攻擊是一種重要的側信道分析方法,其在實際密碼算法破譯中具有較強的區分能力。輕量級分組密碼算法DoT在硬件和軟件實現中都表現岀優秀的性能,盡管目前針對DoT算法的傳統數學攻擊已經取得了
    發表于 03-21 10:34 ?12次下載
    <b class='flag-5'>一種</b>針對DoT算法的<b class='flag-5'>模板</b>攻擊<b class='flag-5'>方法</b>

    設計模式行為型:模板方法模式

    模板模式中,個抽象類公開定義了執行它的方法的方式/模板
    的頭像 發表于 06-07 15:13 ?602次閱讀
    設計<b class='flag-5'>模式</b>行為型:<b class='flag-5'>模板</b><b class='flag-5'>方法</b><b class='flag-5'>模式</b>

    非常經典的FPGA設計方法論.zip

    非常經典的FPGA設計方法
    發表于 12-30 09:22 ?3次下載

    一種簡單高效配置FPGA的方法

    本文描述了一種簡單高效配置FPGA的方法,該方法利用微處理器從串行外圍接口(SPI)閃存配置FPGA設備。這種方法減少了硬件組件、板空間和成
    的頭像 發表于 10-24 14:57 ?685次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>簡單</b>高效配置FPGA的<b class='flag-5'>方法</b>
    主站蜘蛛池模板: 欧美在线视频看看| 久久久久久9| 国产精品天天看天天爽| 岛国毛片一级一级特级毛片| 人人澡人人射| 五月激情五月婷婷| 台湾一级毛片永久免费| 国产精品视频你懂的| 日本人的色道www免费一区| 亚欧成人乱码一区二区| 性配久久久| 3344成年在线视频免费播放男男| 69国产视频| 看黄a大片 免费| 天天干天天夜| 午夜一级免费视频| 在线免费看| 夜夜爽一区二区三区精品| bt天堂资源种子在线| 国产日韩精品一区二区三区| 你懂的欧美| 欧美成人午夜精品免费福利| 日本免费小视频| 黄色福利小视频| 国产三级精品三级| 伊人91在线| 国产精品久线观看视频| 一区二区亚洲视频| 日本免费视频| 国产又黄又爽又猛的免费视频播放| 亚洲美女视频一区| 免费的黄视频| 在线免费色| 性久久久久久久久| 伊人久久大香线蕉综合网站| 在线啪| 全免费a级毛片免费看不卡| 日本福利片午夜免费观着| 狠狠色影院| 男人午夜影院| 成人影院免费观看|