久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

架構(gòu)設(shè)計(jì)基礎(chǔ)知識(shí)整理

 lguo001 2016-11-20

來(lái)源:https://blog./2016/10/25/oo_architecture/


原則


靈活運(yùn)用,而非刻意遵循


1. 基礎(chǔ)原則


盡量少的重復(fù)代碼,,低耦合(盡量小的影響),,高內(nèi)聚

模塊,可小到一個(gè)類,,大到一個(gè)系統(tǒng)


模塊間耦合因素


構(gòu)建架構(gòu)時(shí),,需要謹(jǐn)慎耦合的因素


  • 模塊間調(diào)用

  • 模塊間傳遞的數(shù)據(jù)量

  • 模塊間控制

  • 模塊間接口復(fù)雜度


模塊間耦合從弱到強(qiáng)順序


構(gòu)建架構(gòu)或簡(jiǎn)單的類時(shí),需要根據(jù)實(shí)際情況盡量契合弱的模塊間耦合關(guān)系

做到職責(zé)分明,,簡(jiǎn)單輕量,,盡量少的潛在性的數(shù)據(jù)流動(dòng),盡量少的相互影響,,避免牽一發(fā)而動(dòng)全身


  • 非直接耦合: 相互之間沒(méi)有直接關(guān)系,,而是由第三方模塊控制和調(diào)用

  • 數(shù)據(jù)耦合: 通過(guò)傳遞java的內(nèi)置數(shù)據(jù)類型通訊

  • 標(biāo)記耦合: 都引用了共同的數(shù)據(jù)結(jié)構(gòu),并且通過(guò)傳遞該數(shù)據(jù)結(jié)構(gòu)通訊

  • 控制耦合: 通過(guò)傳遞開關(guān),、標(biāo)志,、名字等控制信息,明顯的控制選擇另一個(gè)模塊的功能

  • 外部耦合: 都訪問(wèn)一個(gè)java的內(nèi)置數(shù)據(jù)類型的全局變量

  • 公共耦合: 都訪問(wèn)了一個(gè)公共代碼塊( 全局?jǐn)?shù)據(jù)結(jié)構(gòu),、公共通訊區(qū)、內(nèi)存公共覆蓋區(qū)等)

  • 內(nèi)容耦合: 一個(gè)模塊直接修改另外一個(gè)模塊的數(shù)據(jù),。


降低耦合度的方法


  • 少用類繼承,,多用類接口隱藏實(shí)現(xiàn)細(xì)節(jié)

  • 模塊功能盡量單一

  • 拒絕重復(fù)代碼

  • 盡量不使用全局變量(Android中的全局變量會(huì)有一些坑,因?yàn)锳ttach在ClassLoader上的,,因此根據(jù)不同ROM的優(yōu)化,,可能會(huì)在未預(yù)料的情況被unload,導(dǎo)致數(shù)據(jù)丟失)

  • 類成員變量與方法少用public,,多用private

  • 盡量不用硬編碼(如 字符串放到 res/string.xml,,SQL語(yǔ)句做一層基于業(yè)務(wù)的封裝供上層使用)

  • 使用設(shè)計(jì)模式,盡量讓模塊間的耦合關(guān)系保證在數(shù)據(jù)耦合或更弱


2. 原則匯總



使用組合而非繼承的場(chǎng)景:


優(yōu)先使用對(duì)象組合,,而非繼承


  • Has-A的關(guān)系,,而非Is-A的關(guān)系

  • 子類的主要目的是拓展父類,,而非override或final,如果存在大量這種情況,,改用組合

  • 引入工具類,,而非繼承自工具類

  • 有可能或不確定 子類 有可能被替換為 另外一個(gè)類的子類的情況 ( 如果出現(xiàn)這種情況,就需要修改,。因此還不如使用 組合,,如果有類似需求,再 組合如新的對(duì)象,,進(jìn)行拓展即可)


繼承需要注意


當(dāng)已經(jīng)選擇使用繼承時(shí),,需要注意


  • 實(shí)現(xiàn)抽象方法,拓展新的特性方法,,盡量少的重載父類非抽象方法

  • 重載父類非抽象方法時(shí): 方法前置條件(方法形參)要比父類方法更寬松,,方法后置條件(方法返回值)要比父類更嚴(yán)格


類之間的關(guān)系與UML表示




常見的模式


1. MVC 與 MVP



From http://msdn.microsoft.com/en-us/library/ff647859.aspx


MVP(Model-View_Presenter)是MVC(Model-View_Controller)的一個(gè)子集。


  • MVC中Controller控制全局事務(wù),,View將事件發(fā)送給Controller,,Controller處理完事件同步給Model(數(shù)據(jù)庫(kù)/數(shù)據(jù)模型),View是通過(guò)所綁定的Model的改變來(lái)刷新自己,。

  • MVP中Presenter從View中獲取數(shù)據(jù),,刷新Model,當(dāng)Model中的數(shù)據(jù)發(fā)生改變后,,Presenter讀取Model并刷新View,。


2. MVVM



MVVM(View<->ViewModel->Model)


在Android中可以通過(guò)DataBinding,直接在Layout文件中綁定其ViewModel,。


  • View: 布局

  • ViewModel: 負(fù)責(zé)顯示數(shù)據(jù)(監(jiān)聽到Model中的數(shù)據(jù)變化進(jìn)行顯示),,以及處理用戶交互(監(jiān)聽View布局中的用戶Action)

  • Model: 存儲(chǔ)內(nèi)容


3. MVVM-C



MVVM-C(View-ViewModel-Callback-Model)


  • View: 布局

  • Callback: 通常可以是Fragment或Activity,,用于處理用戶交互(監(jiān)聽View布局中的用戶Action)

  • ViewModel: 顯示數(shù)據(jù)(監(jiān)聽Model中的數(shù)據(jù)變化進(jìn)行顯示)

  • Model: 存儲(chǔ)內(nèi)容


設(shè)計(jì)模式


1. 工廠方法模式




2. 單例模式


Initialization-on-demand holder idiom


Wiki

性能高,,線程安全 基于JVM Class Loader保證Class唯一性線程安全的模型




3. 建造者模式


與工廠模式區(qū)別是: 工廠模式關(guān)注構(gòu)建單個(gè)類型類型;建造者模式關(guān)注構(gòu)建符合類型對(duì)象,。



4. 原型模式


當(dāng)前對(duì)象對(duì)外提供拷貝方法


淺拷貝


除了基本數(shù)據(jù)類型外,,其他類型的對(duì)象都只持有當(dāng)前對(duì)象的引用,而非重新創(chuàng)建拷貝


Java中的Object#clone


  1. Object#clone()就已經(jīng)提供了該對(duì)象的淺拷貝

  2. 如果需要使用Object#clone,需要類實(shí)現(xiàn)Clonable這個(gè)接口,,來(lái)申明該類對(duì)象支持拷貝,,否則會(huì)拋CloneNotSupportedException, 如果對(duì)象中存在隊(duì)列成員變量,隊(duì)列也需要實(shí)現(xiàn)Clonable


深拷貝


所有成員變量都將重新創(chuàng)建


方式一:


直接序列化(Java中基于JVM層級(jí)最簡(jiǎn)單的讓對(duì)象支持序列化的方式,,實(shí)現(xiàn)Serializable),,拷貝二進(jìn)制流。


方式二(推薦):


基于Object#clone()將非基本數(shù)據(jù)類型以外的元素都實(shí)現(xiàn)深拷貝,,挨個(gè)深拷貝返回,。


5. 適配器模式




6. 裝飾模式



7. 代理模式




8. 外觀模式



9. 橋接模式



10. 組合模式




11. 享元模式





12. 策略模式




13. 模板方法模式




14. 觀察者模式


(未完待續(xù))



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多