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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

宋寶華:一種非常經(jīng)典簡單的設(shè)計模式——模板方法

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

前言

《設(shè)計模式》這本經(jīng)典的書里面定義了20多種設(shè)計模式,雖然都是面向?qū)ο蟮模坪跣枰?a href="http://m.xsypw.cn/tags/C++/" target="_blank">C++Java這樣的語言才能實現(xiàn),但是根據(jù)筆者前面反復(fù)強(qiáng)調(diào)的,Linux內(nèi)核雖然是用C語言匯編語言寫成,但是其實也到處充滿了面向?qū)ο蟮脑O(shè)計。面向?qū)ο蟾嗟氖且环N思想,而不是一個語言。我們可以用C語言實現(xiàn)極大的OO,Linux內(nèi)核到處都有OO。

模板方法

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

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

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

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

驅(qū)動案例

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

比如寫OOB的代碼:

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

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

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

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

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

后語

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

1.通過做驅(qū)動理解很多OO的架構(gòu)設(shè)計思想,升華自己高內(nèi)聚和低耦合的理解,把自己變成一個更高level的software engineer;

2.通過做驅(qū)動,進(jìn)一步理解Linux本身的進(jìn)程、內(nèi)存、IO等知識,升華對軟件系統(tǒng)和性能分析的理解,把自己變成一個更高level的技術(shù)expert。

如果做了5年驅(qū)動,進(jìn)入的時候是調(diào)試寄存器示波器,出來的時候還是調(diào)寄存器搞示波器,那自然是完全沒有什么前途的!

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11419

    瀏覽量

    212288
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7626

    瀏覽量

    139629

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    一種簡單的OpenHarmony環(huán)境搭建方法

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

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

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

    清遠(yuǎn)見教程

    《Linux按鍵和LCD設(shè)備驅(qū)動》主講老師:清遠(yuǎn)見企業(yè)學(xué)院講師,視頻要點:1、Linux按鍵和觸摸屏驅(qū)動和應(yīng)用編程;2、LinuxLCD驅(qū)動和應(yīng)用編程。《Linux按鍵和LC
    發(fā)表于 04-10 11:48

    _精通LINUX設(shè)備驅(qū)動開發(fā)

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

    一種改進(jìn)的自適應(yīng)模板匹配法

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

    模板方法模式在回溯算法中的應(yīng)用

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

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

    STEP模式映射的一種實用方法 在STEP標(biāo)準(zhǔn)的應(yīng)用中, 常需要通過不同STEP應(yīng)用協(xié)議之間或其中某應(yīng)用協(xié)議的不同視圖之間的映射來實現(xiàn)異構(gòu)系統(tǒng)間的數(shù)據(jù)交換。本文提
    發(fā)表于 02-22 14:37 ?10次下載

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

    相關(guān)系數(shù)法模板匹配是數(shù)字?jǐn)z影檢測中的一種經(jīng)典的基于灰度的匹配方法。提出了一種基于模板匹配的電子器
    發(fā)表于 08-02 14:12 ?19次下載

    一種基于STM32的SMS短消息收發(fā)系統(tǒng)_

    一種基于STM32的SMS短消息收發(fā)系統(tǒng)_
    發(fā)表于 01-14 22:32 ?0次下載

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

    模板攻擊是一種重要的側(cè)信道分析方法,其在實際密碼算法破譯中具有較強(qiáng)的區(qū)分能力。輕量級分組密碼算法DoT在硬件和軟件實現(xiàn)中都表現(xiàn)岀優(yōu)秀的性能,盡管目前針對DoT算法的傳統(tǒng)數(shù)學(xué)攻擊已經(jīng)取得了
    發(fā)表于 03-21 10:34 ?8次下載
    <b class='flag-5'>一種</b>針對DoT算法的<b class='flag-5'>模板</b>攻擊<b class='flag-5'>方法</b>

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

    模板攻擊是一種重要的側(cè)信道分析方法,其在實際密碼算法破譯中具有較強(qiáng)的區(qū)分能力。輕量級分組密碼算法DoT在硬件和軟件實現(xiàn)中都表現(xiàn)岀優(yōu)秀的性能,盡管目前針對DoT算法的傳統(tǒng)數(shù)學(xué)攻擊已經(jīng)取得了
    發(fā)表于 03-21 10:34 ?12次下載
    <b class='flag-5'>一種</b>針對DoT算法的<b class='flag-5'>模板</b>攻擊<b class='flag-5'>方法</b>

    設(shè)計模式行為型:模板方法模式

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

    非常經(jīng)典的FPGA設(shè)計方法論.zip

    非常經(jīng)典的FPGA設(shè)計方法
    發(fā)表于 12-30 09:22 ?3次下載

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

    本文描述了一種簡單高效配置FPGA的方法,該方法利用微處理器從串行外圍接口(SPI)閃存配置FPGA設(shè)備。這種方法減少了硬件組件、板空間和成
    的頭像 發(fā)表于 10-24 14:57 ?1234次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>簡單</b>高效配置FPGA的<b class='flag-5'>方法</b>
    主站蜘蛛池模板: 亚洲大尺度视频 | 中文字幕一区二区三区不卡 | 夜夜草天天干 | 人人精品久久 | 拍拍拍拍拍拍拍无挡大全免费 | 午夜影视剧场 | 97影院午夜午夜伦不卡 | 我要看一级大片 | 免费一级牲交毛片 | 狠狠色丁香婷婷综合 | 中文字幕在线观看日剧网 | 国产特黄1级毛片 | 亚洲国产精品综合久久网络 | 黄色视屏日本 | 黄色国产网站 | 污污视频在线免费看 | 在线观看www日本免费网站 | 亚州 色 图 综合 | 草逼网址 | 精品国产一区二区三区成人 | 奇米影视四色首页手机在线 | 亚洲午夜日韩高清一区 | 免费一级特黄特色大片在线观看看 | 日本人69xxxxxxx69 | 在线免费观看你懂的 | 久久狼人综合 | 亚洲4区| 久久综合九九亚洲一区 | 久草亚洲视频 | 中文字幕在线永久在线视频2020 | 色色色色色色色色色色色色 | 狠狠色综合色综合网络 | 黄色污网站在线观看 | 最近免费hd | 亚洲美女激情视频 | 国产视频一区二 | 97色涩| 精品成人毛片一区二区视 | 在线观看免费午夜大片 | 久久精品亚洲一区二区三区浴池 | 美女张开腿露尿口给男人亲 |