chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

Linux閱碼場 ? 來源:lq ? 2019-01-14 16:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

模板方法

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

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

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

這樣的設(shè)計(jì)讓外部不關(guān)心derivedClass,因?yàn)榱鞒毯?a target="_blank">接口都是在基類的。而基類實(shí)現(xiàn)的doSomething()成員函數(shù),是對(duì)外的接口。這個(gè)UML關(guān)系是非常簡單的:

驅(qū)動(dòng)案例

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

比如寫OOB的代碼:

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

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

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

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

這樣的例子無處不在,比如我們?cè)贚CD的中間層:

后語

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

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

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

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

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

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

    關(guān)注

    88

    文章

    11628

    瀏覽量

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

    關(guān)注

    183

    文章

    7642

    瀏覽量

    144616

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

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

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

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

    清遠(yuǎn)見教程

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

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

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

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

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

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

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

    STEP模式映射的一種實(shí)用方法

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

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

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

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

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

    一種針對(duì)DoT算法的模板攻擊方法

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

    一種針對(duì)DoT算法的模板攻擊方法

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

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

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

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

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

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

    本文描述了一種簡單高效配置FPGA的方法,該方法利用微處理器從串行外圍接口(SPI)閃存配置FPGA設(shè)備。這種方法減少了硬件組件、板空間和成
    的頭像 發(fā)表于 10-24 14:57 ?2290次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>簡單</b>高效配置FPGA的<b class='flag-5'>方法</b>