哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

Linux閱碼場(chǎng) ? 來(lái)源:lq ? 2019-01-14 16:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

模板方法

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

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

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

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

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

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

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

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

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

后語(yǔ)

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

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

2.通過(guò)做驅(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)試寄存器示波器,出來(lái)的時(shí)候還是調(diào)寄存器搞示波器,那自然是完全沒(méi)有什么前途的!

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

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

    關(guān)注

    88

    文章

    11806

    瀏覽量

    219484
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7645

    瀏覽量

    146086

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    一種簡(jiǎn)單的可控硅好壞判斷方法

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

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

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

    一種簡(jiǎn)單的逆變器輸出直流分量消除方法

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

    清遠(yuǎn)見(jiàn)教程

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

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

    的這本書(shū)就不要我介紹了。
    發(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 語(yǔ)言實(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)用中, 常需要通過(guò)不同STEP應(yīng)用協(xié)議之間或其中某應(yīng)用協(xié)議的不同視圖之間的映射來(lái)實(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è)抽象類(lèi)公開(kāi)定義了執(zhí)行它的方法的方式/模板。
    的頭像 發(fā)表于 06-07 15:13 ?1193次閱讀
    設(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 ?4次下載

    一種簡(jiǎn)單高效配置FPGA的方法

    本文描述了一種簡(jiǎn)單高效配置FPGA的方法,該方法利用微處理器從串行外圍接口(SPI)閃存配置FPGA設(shè)備。這種方法減少了硬件組件、板空間和成
    的頭像 發(fā)表于 10-24 14:57 ?2753次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>簡(jiǎn)單</b>高效配置FPGA的<b class='flag-5'>方法</b>
    吴旗县| 界首市| 嘉荫县| 潍坊市| 通江县| 云梦县| 溧水县| 普洱| 宁明县| 三门县| 英超| 平南县| 宿州市| 湾仔区| 武汉市| 河东区| 儋州市| 绩溪县| 隆子县| 清流县| 墨脱县| 金寨县| 眉山市| 海伦市| 静宁县| 应城市| 东乡族自治县| 扎鲁特旗| 汉中市| 尚志市| 镇远县| 定结县| 平阴县| 鄯善县| 樟树市| 龙山县| 定边县| 武清区| 无锡市| 江西省| 江津市|