1同辣、數(shù)據(jù)抽象
我們平時(shí)在寫實(shí)體類的時(shí)候通常會(huì)把類的成員變量定義成private的甚垦,然后提供相應(yīng)的get和set方法供外部調(diào)用來(lái)實(shí)現(xiàn)對(duì)該對(duì)象的屬性修改,而不是直接的操作成員變量科侈。這種做法體現(xiàn)了java的封裝性泊藕,不想暴露內(nèi)部結(jié)構(gòu)(實(shí)際上還是暴露了)田藐。這種想法個(gè)人覺(jué)的和對(duì)外提供接口的想法有點(diǎn)類似,不需要暴露具體實(shí)現(xiàn)吱七,只需要提供必要的參數(shù)汽久,我就返回相應(yīng)的結(jié)果。
隱藏實(shí)現(xiàn)并非只是在變量之間放上一個(gè)函數(shù)層那么簡(jiǎn)單踊餐。隱藏實(shí)現(xiàn)關(guān)乎抽象景醇!類并不簡(jiǎn)單地用取值器和賦值器將其變量推向外間,而是暴露抽象接口吝岭,以便用戶無(wú)需了解數(shù)據(jù)的實(shí)現(xiàn)就能操作數(shù)據(jù)本體三痰。
理解:模塊不應(yīng)該了解它所操作對(duì)象的內(nèi)部情形。對(duì)象應(yīng)該暴露行為窜管,而不是數(shù)據(jù)散劫。
2、數(shù)據(jù)幕帆、對(duì)象的反對(duì)稱性
對(duì)象把數(shù)據(jù)隱藏于抽象之后获搏,暴露操作數(shù)據(jù)的函數(shù);數(shù)據(jù)結(jié)構(gòu)暴露其數(shù)據(jù)失乾,沒(méi)有提供有意義的函數(shù)常熙。
過(guò)程式代碼便于在不改動(dòng)既有數(shù)據(jù)結(jié)構(gòu)的前提下添加新函數(shù)。面向?qū)ο蟠a便于在不改動(dòng)既有函數(shù)的前提下添加新類碱茁。
反過(guò)來(lái)說(shuō):
過(guò)程式代碼難以添加新數(shù)據(jù)結(jié)構(gòu)裸卫,因?yàn)楸仨毿薷乃泻瘮?shù)。面向?qū)ο蟠a難以添加新函數(shù)纽竣,因?yàn)楸仨毿薷乃蓄悺?/em>
所以墓贿,對(duì)于面向?qū)ο筝^難的事,對(duì)于過(guò)程式代碼卻比較容易蜓氨,反之亦然聋袋!
3、得墨忒耳律
規(guī)則:對(duì)象 O 的 M 方法语盈,可以訪問(wèn)/調(diào)用如下的:
1. 對(duì)象 O 本身
2. M 方法的傳入?yún)?shù)
3. M 方法中創(chuàng)建或?qū)嵗娜我鈱?duì)象
4. 對(duì)象 O 直接的組件對(duì)象
5. 在M范圍內(nèi)舱馅,可被O訪問(wèn)的全局變量
好處:
? 我們可以更改一個(gè)類缰泡,而無(wú)需因連鎖反應(yīng)再去改許多其他的(類)刀荒。
? 我們可以改變調(diào)用的方法代嗤,而無(wú)需改變其他任何東西。
? 遵從LOD缠借,讓測(cè)試更容易被構(gòu)建干毅。我們不必為了模擬而寫很多的’when’和各種return。
? 提高了封裝和抽象泼返。
? 基本上硝逢,我們隱藏了“xx是如何工作的”。
? 讓代碼更少的耦合绅喉。主叫方法只耦合一個(gè)對(duì)象渠鸽,而并非所有的內(nèi)部依賴。
? 它通常會(huì)更好地模擬現(xiàn)實(shí)世界柴罐。想想錢包與付款的那個(gè)比喻徽缚。
(ImportNew:http://www.importnew.com/10501.html)
law of demeter, LKP最少知道原則:一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象又盡可能少的了解,不和陌生人說(shuō)話革屠。也即是方法不應(yīng)該調(diào)用由任何函數(shù)返回對(duì)象的方法凿试。
4、數(shù)據(jù)傳送對(duì)象
最為精煉的數(shù)據(jù)結(jié)構(gòu)似芝,是一個(gè)只有公共變量那婉、沒(méi)有函數(shù)的類。這種數(shù)據(jù)結(jié)構(gòu)有時(shí)被稱為數(shù)據(jù)傳送對(duì)象党瓮,或DTO详炬。