溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ThoughtWorks的結(jié)對編程指的是什么

發(fā)布時間:2021-12-21 09:11:36 來源:億速云 閱讀:686 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細講解有關(guān)ThoughtWorks的結(jié)對編程指的是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

傳言:在國內(nèi),ThoughtWorks被稱為“最難面試的IT公司”。貌似在國外也被評為全球最難面試的IT司。

面試一般都是紙上談兵,尤其是設(shè)計模式這種需要“付諸實踐”的面試題。面試前先給面試者布置“家庭作業(yè)”,然后Thoughtworks會派工程師和面試者進行結(jié)對編程,讓面試者通過測試驅(qū)動和代碼重構(gòu)表現(xiàn)他/她的編程規(guī)范、設(shè)計和重構(gòu)的能力。這個時候可以很容易看到面試者對設(shè)計模式的掌握和運用情況。

設(shè)計模式,一般在面試的過程中都可以可無的提及到。但是這個就真的是看面試官的心情了。問簡單了吧,單例模式,工廠模式,然后再深一點,單利模式是如何保證單例的實現(xiàn)的,感覺有點吹毛求疵的感覺。

回調(diào)函數(shù)和觀察者模式的區(qū)別?

作為一個"資深程序員",看到這個題目你一定在飛速的思考著這個問題吧,這個題目其實不是在重點的考驗?zāi)愕脑O(shè)計模式的能力,而是考驗一個程序員的及時反應(yīng)能力。

觀察者模式

網(wǎng)上很容易查到觀察者模式的定義:

觀察者模式定義了對象間的一種一對多依賴關(guān)系,使得每當(dāng)一個對象改變狀態(tài),則所有依賴于它的對象都會得到通知并被自動更新。

Android中大量的使用了觀察者模式。你可能已經(jīng)用過ListView的adapter.notifyDataSetChanged來觸發(fā)ListView的列表界面進行更新。notifyDataSetChanged的內(nèi)部實現(xiàn)就是基于觀察者模式。

ThoughtWorks的結(jié)對編程指的是什么

跟進這段代碼你會發(fā)現(xiàn):BaseAdapter中的DataSetObserver(觀察者)實現(xiàn)

Observer接口,DataSetObservable(被觀察者)繼承Observable類。

標(biāo)準(zhǔn)的觀察者模式的寫法應(yīng)該照下面的UML圖:

ThoughtWorks的結(jié)對編程指的是什么

有幾個概念(抽象主題(Subject)、具體主題(ConcreteSubject)、抽象觀察者(Observer)和具體觀察者(ConcreteObserver)),好在Java幫我實現(xiàn)了相關(guān)的代碼,可以通過Observable類和Observer接口實現(xiàn)了觀察者模式。Observer對象是觀察者,Observable對象是被觀察者。

還有EventBus, RxJava等常見的開源庫也是居于觀察者模式設(shè)計的,只是它們實現(xiàn)的方式各有不同。

回調(diào)函數(shù)

那回調(diào)函數(shù)和這又有什么關(guān)系呢?看看這段再熟悉不過的代碼片段:

ThoughtWorks的結(jié)對編程指的是什么

View的Listener監(jiān)聽會通過setOnClickListener給View傳遞一個Listener對象,當(dāng)相關(guān)的事件發(fā)生時是觸發(fā)onClick(回調(diào)onClick)。這其實也是一種觀察者模式,OnClickListener是觀察者,View是被觀察者,當(dāng)View收到Click事件是會通知觀察者執(zhí)行onClick()。

關(guān)于設(shè)計模式的反思

模式的外在形式其實是“套路”,這些套路來源于現(xiàn)實中生產(chǎn)實踐的總結(jié),但要清楚認識到不是所有“套路”都會合適你的。

設(shè)計模式是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

設(shè)計模式的初衷是用經(jīng)過檢驗的“套路”來提高代碼的生產(chǎn)效率,人們也容易理解約定成俗的“套路”。從面向?qū)ο笤O(shè)計的角度來看,其實就是要做到高內(nèi)聚低耦合。

所以,在考慮使用什么樣的模式或模式組合時,我們不妨先冷靜下來回憶一下面向?qū)ο笤O(shè)計的SOLID原則,我們要遵循一定的原則,而不是為了模式而模式。

面向?qū)ο笤O(shè)計的SOLID原則:

  • S 單一功能原則:對象應(yīng)該僅具有一種單一功能。

  • O 開閉原則:軟件體應(yīng)該是對于擴展開放的,但是對于修改封閉的。

  • L    里氏替換原則:程序中的對象應(yīng)該是可以在不改變程序正確性的前提下被它的子類所替換的。

  • I    接口隔離原則:多個特定客戶端接口要好于一個寬泛用途的接口。

  • D     依賴反轉(zhuǎn)原則:依賴于抽象而不是一個實例,依賴注入是該原則的一種實現(xiàn)方式。


所以綜上所述:(答案不是標(biāo)準(zhǔn),只是一種思路)

觀察者模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。觀察者模式完美的將觀察者和被觀察的對象分離開,一個對象的狀態(tài)發(fā)生變化時,所有依賴于它的對象都得到通知并自動刷新。
回調(diào)函數(shù)其實也算是一種觀察者模式的實現(xiàn)方式,回調(diào)函數(shù)實現(xiàn)的觀察者和被觀察者往往是一對一的依賴關(guān)系。
所以最明顯的區(qū)別是觀察者模式是一種設(shè)計思路,而回調(diào)函數(shù)式一種具體的實現(xiàn)方式;另一明顯區(qū)別是一對多還是多對多的依賴關(guān)系方面。

Android較常用到的設(shè)計模式?
標(biāo)準(zhǔn)答案:
適配器模式:GridView、ListView的Adapter;
建造者模式:AlertDialog.Builder;
觀察者模式:ListView的adapter.notifyDataSetChanged;
責(zé)任鏈模式:View的事件分發(fā);

關(guān)于ThoughtWorks的結(jié)對編程指的是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI