您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關ThoughtWorks的結對編程指的是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
傳言:在國內,ThoughtWorks被稱為“最難面試的IT公司”。貌似在國外也被評為全球最難面試的IT司。
面試一般都是紙上談兵,尤其是設計模式這種需要“付諸實踐”的面試題。面試前先給面試者布置“家庭作業”,然后Thoughtworks會派工程師和面試者進行結對編程,讓面試者通過測試驅動和代碼重構表現他/她的編程規范、設計和重構的能力。這個時候可以很容易看到面試者對設計模式的掌握和運用情況。
設計模式,一般在面試的過程中都可以可無的提及到。但是這個就真的是看面試官的心情了。問簡單了吧,單例模式,工廠模式,然后再深一點,單利模式是如何保證單例的實現的,感覺有點吹毛求疵的感覺。
作為一個"資深程序員",看到這個題目你一定在飛速的思考著這個問題吧,這個題目其實不是在重點的考驗你的設計模式的能力,而是考驗一個程序員的及時反應能力。
網上很容易查到觀察者模式的定義:
觀察者模式定義了對象間的一種一對多依賴關系,使得每當一個對象改變狀態,則所有依賴于它的對象都會得到通知并被自動更新。
Android中大量的使用了觀察者模式。你可能已經用過ListView的adapter.notifyDataSetChanged來觸發ListView的列表界面進行更新。notifyDataSetChanged的內部實現就是基于觀察者模式。
跟進這段代碼你會發現:BaseAdapter中的DataSetObserver(觀察者)實現
Observer接口,DataSetObservable(被觀察者)繼承Observable類。
標準的觀察者模式的寫法應該照下面的UML圖:
有幾個概念(抽象主題(Subject)、具體主題(ConcreteSubject)、抽象觀察者(Observer)和具體觀察者(ConcreteObserver)),好在Java幫我實現了相關的代碼,可以通過Observable類和Observer接口實現了觀察者模式。Observer對象是觀察者,Observable對象是被觀察者。
還有EventBus, RxJava等常見的開源庫也是居于觀察者模式設計的,只是它們實現的方式各有不同。
那回調函數和這又有什么關系呢?看看這段再熟悉不過的代碼片段:
View的Listener監聽會通過setOnClickListener給View傳遞一個Listener對象,當相關的事件發生時是觸發onClick(回調onClick)。這其實也是一種觀察者模式,OnClickListener是觀察者,View是被觀察者,當View收到Click事件是會通知觀察者執行onClick()。
模式的外在形式其實是“套路”,這些套路來源于現實中生產實踐的總結,但要清楚認識到不是所有“套路”都會合適你的。
設計模式是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
設計模式的初衷是用經過檢驗的“套路”來提高代碼的生產效率,人們也容易理解約定成俗的“套路”。從面向對象設計的角度來看,其實就是要做到高內聚低耦合。
所以,在考慮使用什么樣的模式或模式組合時,我們不妨先冷靜下來回憶一下面向對象設計的SOLID原則,我們要遵循一定的原則,而不是為了模式而模式。
面向對象設計的SOLID原則:
S 單一功能原則:對象應該僅具有一種單一功能。
O 開閉原則:軟件體應該是對于擴展開放的,但是對于修改封閉的。
L 里氏替換原則:程序中的對象應該是可以在不改變程序正確性的前提下被它的子類所替換的。
I 接口隔離原則:多個特定客戶端接口要好于一個寬泛用途的接口。
D 依賴反轉原則:依賴于抽象而不是一個實例,依賴注入是該原則的一種實現方式。
所以綜上所述:(答案不是標準,只是一種思路)
觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。觀察者模式完美的將觀察者和被觀察的對象分離開,一個對象的狀態發生變化時,所有依賴于它的對象都得到通知并自動刷新。
回調函數其實也算是一種觀察者模式的實現方式,回調函數實現的觀察者和被觀察者往往是一對一的依賴關系。
所以最明顯的區別是觀察者模式是一種設計思路,而回調函數式一種具體的實現方式;另一明顯區別是一對多還是多對多的依賴關系方面。
Android較常用到的設計模式?
標準答案:
適配器模式:GridView、ListView的Adapter;
建造者模式:AlertDialog.Builder;
觀察者模式:ListView的adapter.notifyDataSetChanged;
責任鏈模式:View的事件分發;
關于ThoughtWorks的結對編程指的是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。