面向?qū)ο蟮娜齻€(gè)特征和五大原則

天青色等煙雨赋秀,而我在等你。 ——《青花瓷》

注:天青色是無法自己形成的,在青瓷出爐的那一瞬必須是煙雨天,釉色才會(huì)漸變成夢(mèng)幻般的天青色.因此雨過天晴的瓷器極為珍惜.

面向?qū)ο蟮娜齻€(gè)特征

封裝?

? ? ? 將客觀事物封裝成抽象的類篮撑,并且類可以將自己的屬性或者方法讓他信任的類或者對(duì)象訪問。

Java中類中成員的屬性有:public匆瓜, protected赢笨, <default>, private驮吱,這四個(gè)屬性的訪問權(quán)限依次降低茧妒。

public:對(duì)所有的類和對(duì)象開放,都可以直接調(diào)用左冬;

protected:類內(nèi)部桐筏,同一個(gè)包內(nèi)或者子類。

??<default>:及不添加修飾符拇砰,選擇默認(rèn)梅忌。只對(duì)類內(nèi)部或者同一包內(nèi)的開放狰腌。

?private:只有類內(nèi)部可用。

繼承

? ? ?繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能牧氮,并在無需重新編寫原來的類的情況下對(duì)這些功能進(jìn)行擴(kuò)展琼腔。

? 實(shí)現(xiàn)繼承的方式有兩種,繼承類或者實(shí)現(xiàn)接口踱葛。只能繼承一個(gè)類但是可以實(shí)現(xiàn)多個(gè)接口展姐。

? ?拓展:上面提到private修飾的屬性或者方法子類也是不可以直接調(diào)用的。但是在子類被實(shí)例化的時(shí)候會(huì)先調(diào)用父類的構(gòu)造方法剖毯,初始化父類圾笨,然后加上子類特有的屬性和方法,合起來生成子類逊谋。所以說子類繼承或擁有父類所有的屬性和方法是正確的擂达,只是對(duì)私有的不能直接調(diào)用。

多態(tài)

? 所謂多態(tài)就是指一個(gè)類實(shí)例的相同方法在不同情形有不同表現(xiàn)形式胶滋。

? 實(shí)現(xiàn)多態(tài)板鬓,有二種方式,覆蓋究恤,重載俭令。

? 覆蓋,是指子類重新定義父類的虛函數(shù)的做法部宿。

? ?重載抄腔,是指允許存在多個(gè)同名函數(shù),而這些函數(shù)的參數(shù)表不同(或許參數(shù)個(gè)數(shù)不同理张,或許參數(shù) 類型不同赫蛇,或許兩者都不同)。

面向?qū)ο蟮奈宕笤瓌t

注:此處為引用其他博主的內(nèi)容雾叭。感覺清晰易懂悟耘,所以摘抄到此處供自己學(xué)習(xí)。附相應(yīng)的連接(如需刪除請(qǐng)聯(lián)系本人):

https://github.com/hollischuang/toBeTopJavaer/blob/master/basics/java-basic/principle.md#%E5%BC%80%E6%94%BE%E5%B0%81%E9%97%AD%E5%8E%9F%E5%88%99open-closed-principle

單一職責(zé)原則(Single-Resposibility Principle)

其核心思想為:一個(gè)類织狐,最好只做一件事暂幼,只有一個(gè)引起它的變化。單一職責(zé)原則可以看做是低耦合移迫、高內(nèi)聚在面向?qū)ο笤瓌t上的引申旺嬉,將職責(zé)定義為引起變化的原因,以提高內(nèi)聚性來減少引起變化的原因起意。職責(zé)過多鹰服,可能引起它變化的原因就越多,這將導(dǎo)致職責(zé)依賴,相互之間就產(chǎn)生影響悲酷,從而大大損傷其內(nèi)聚性和耦合度套菜。通常意義下的單一職責(zé),就是指只有一種單一功能设易,不要為類實(shí)現(xiàn)過多的功能點(diǎn)逗柴,以保證實(shí)體只有一個(gè)引起它變化的原因。 專注顿肺,是一個(gè)人優(yōu)良的品質(zhì)戏溺;同樣的,單一也是一個(gè)類的優(yōu)良設(shè)計(jì)屠尊。交雜不清的職責(zé)將使得代碼看起來特別別扭牽一發(fā)而動(dòng)全身旷祸,有失美感和必然導(dǎo)致丑陋的系統(tǒng)錯(cuò)誤風(fēng)險(xiǎn)。

開放封閉原則(Open-Closed principle)

其核心思想是:軟件實(shí)體應(yīng)該是可擴(kuò)展的讼昆,而不可修改的托享。也就是,對(duì)擴(kuò)展開放浸赫,對(duì)修改封閉的闰围。開放封閉原則主要體現(xiàn)在兩個(gè)方面1、對(duì)擴(kuò)展開放既峡,意味著有新的需求或變化時(shí)羡榴,可以對(duì)現(xiàn)有代碼進(jìn)行擴(kuò)展,以適應(yīng)新的情況运敢。2校仑、對(duì)修改封閉,意味著類一旦設(shè)計(jì)完成者冤,就可以獨(dú)立完成其工作肤视,而不要對(duì)其進(jìn)行任何嘗試的修改。 實(shí)現(xiàn)開開放封閉原則的核心思想就是對(duì)抽象編程涉枫,而不對(duì)具體編程,因?yàn)槌橄笙鄬?duì)穩(wěn)定腐螟。讓類依賴于固定的抽象愿汰,所以修改就是封閉的;而通過面向?qū)ο蟮睦^承和多態(tài)機(jī)制乐纸,又可以實(shí)現(xiàn)對(duì)抽象類的繼承衬廷,通過覆寫其方法來改變固有行為,實(shí)現(xiàn)新的拓展方法汽绢,所以就是開放的吗跋。 “需求總是變化”沒有不變的軟件,所以就需要用封閉開放原則來封閉變化滿足需求,同時(shí)還能保持軟件內(nèi)部的封裝體系穩(wěn)定跌宛,不被需求的變化影響酗宋。

Liskov替換原則(Liskov-Substitution Principle)

其核心思想是:子類必須能夠替換其基類。這一思想體現(xiàn)為對(duì)繼承機(jī)制的約束規(guī)范疆拘,只有子類能夠替換基類時(shí)蜕猫,才能保證系統(tǒng)在運(yùn)行期內(nèi)識(shí)別子類,這是保證繼承復(fù)用的基礎(chǔ)哎迄。在父類和子類的具體行為中回右,必須嚴(yán)格把握繼承層次中的關(guān)系和特征,將基類替換為子類漱挚,程序的行為不會(huì)發(fā)生任何變化翔烁。同時(shí),這一約束反過來則是不成立的旨涝,子類可以替換基類租漂,但是基類不一定能替換子類。 Liskov替換原則颊糜,主要著眼于對(duì)抽象和多態(tài)建立在繼承的基礎(chǔ)上哩治,因此只有遵循了Liskov替換原則,才能保證繼承復(fù)用是可靠地衬鱼。實(shí)現(xiàn)的方法是面向接口編程:將公共部分抽象為基類接口或抽象類业筏,通過Extract Abstract Class,在子類中通過覆寫父類的方法實(shí)現(xiàn)新的方式支持同樣的職責(zé)鸟赫。 Liskov替換原則是關(guān)于繼承機(jī)制的設(shè)計(jì)原則蒜胖,違反了Liskov替換原則就必然導(dǎo)致違反開放封閉原則。 Liskov替換原則能夠保證系統(tǒng)具有良好的拓展性抛蚤,同時(shí)實(shí)現(xiàn)基于多態(tài)的抽象機(jī)制台谢,能夠減少代碼冗余,避免運(yùn)行期的類型判別岁经。

依賴倒置原則(Dependecy-Inversion Principle)

其核心思想是:依賴于抽象朋沮。具體而言就是高層模塊不依賴于底層模塊,二者都同依賴于抽象缀壤;抽象不依賴于具體樊拓,具體依賴于抽象。 我們知道塘慕,依賴一定會(huì)存在于類與類筋夏、模塊與模塊之間。當(dāng)兩個(gè)模塊之間存在緊密的耦合關(guān)系時(shí)图呢,最好的方法就是分離接口和實(shí)現(xiàn):在依賴之間定義一個(gè)抽象的接口使得高層模塊調(diào)用接口条篷,而底層模塊實(shí)現(xiàn)接口的定義骗随,以此來有效控制耦合關(guān)系,達(dá)到依賴于抽象的設(shè)計(jì)目標(biāo)赴叹。 抽象的穩(wěn)定性決定了系統(tǒng)的穩(wěn)定性鸿染,因?yàn)槌橄笫遣蛔兊模蕾囉诔橄笫敲嫦驅(qū)ο笤O(shè)計(jì)的精髓稚瘾,也是依賴倒置原則的核心牡昆。 依賴于抽象是一個(gè)通用的原則,而某些時(shí)候依賴于細(xì)節(jié)則是在所難免的摊欠,必須權(quán)衡在抽象和具體之間的取舍,方法不是一層不變的些椒。依賴于抽象播瞳,就是對(duì)接口編程免糕,不要對(duì)實(shí)現(xiàn)編程牌芋。

接口隔離原則(Interface-Segregation Principle)

其核心思想是:使用多個(gè)小的專門的接口躺屁,而不要使用一個(gè)大的總接口。 具體而言烁兰,接口隔離原則體現(xiàn)在:接口應(yīng)該是內(nèi)聚的耐亏,應(yīng)該避免“胖”接口。一個(gè)類對(duì)另外一個(gè)類的依賴應(yīng)該建立在最小的接口上沪斟,不要強(qiáng)迫依賴不用的方法广辰,這是一種接口污染。 接口有效地將細(xì)節(jié)和抽象隔離币喧,體現(xiàn)了對(duì)抽象編程的一切好處轨域,接口隔離強(qiáng)調(diào)接口的單一性。而胖接口存在明顯的弊端杀餐,會(huì)導(dǎo)致實(shí)現(xiàn)的類型必須完全實(shí)現(xiàn)接口的所有方法、屬性等朱巨;而某些時(shí)候史翘,實(shí)現(xiàn)類型并非需要所有的接口定義,在設(shè)計(jì)上這是“浪費(fèi)”,而且在實(shí)施上這會(huì)帶來潛在的問題琼讽,對(duì)胖接口的修改將導(dǎo)致一連串的客戶端程序需要修改必峰,有時(shí)候這是一種災(zāi)難。在這種情況下钻蹬,將胖接口分解為多個(gè)特點(diǎn)的定制化方法吼蚁,使得客戶端僅僅依賴于它們的實(shí)際調(diào)用的方法,從而解除了客戶端不會(huì)依賴于它們不用的方法问欠。 分離的手段主要有以下兩種:1肝匆、委托分離,通過增加一個(gè)新的類型來委托客戶的請(qǐng)求顺献,隔離客戶和接口的直接依賴旗国,但是會(huì)增加系統(tǒng)的開銷。2注整、多重繼承分離能曾,通過接口多繼承來實(shí)現(xiàn)客戶的需求,這種方式是較好的肿轨。

以上就是5個(gè)基本的面向?qū)ο笤O(shè)計(jì)原則寿冕,它們就像面向?qū)ο蟪绦蛟O(shè)計(jì)中的金科玉律,遵守它們可以使我們的代碼更加鮮活椒袍,易于復(fù)用驼唱,易于拓展,靈活優(yōu)雅槐沼。不同的設(shè)計(jì)模式對(duì)應(yīng)不同的需求曙蒸,而設(shè)計(jì)原則則代表永恒的靈魂,需要在實(shí)踐中時(shí)時(shí)刻刻地遵守岗钩。就如ARTHUR J.RIEL在那邊《OOD啟示錄》中所說的:“你并不必嚴(yán)格遵守這些原則纽窟,違背它們也不會(huì)被處以宗教刑罰。但你應(yīng)當(dāng)把這些原則看做警鈴兼吓,若違背了其中的一條臂港,那么警鈴就會(huì)響起∈硬”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末审孽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子浑娜,更是在濱河造成了極大的恐慌佑力,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筋遭,死亡現(xiàn)場(chǎng)離奇詭異打颤,居然都是意外死亡暴拄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門编饺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乖篷,“玉大人,你說我怎么就攤上這事透且∷喊” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵秽誊,是天一觀的道長(zhǎng)鲸沮。 經(jīng)常有香客問我,道長(zhǎng)养距,這世上最難降的妖魔是什么诉探? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮棍厌,結(jié)果婚禮上肾胯,老公的妹妹穿的比我還像新娘。我一直安慰自己耘纱,他們只是感情好敬肚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著束析,像睡著了一般艳馒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上员寇,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天弄慰,我揣著相機(jī)與錄音,去河邊找鬼蝶锋。 笑死陆爽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扳缕。 我是一名探鬼主播慌闭,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼躯舔!你這毒婦竟也來了驴剔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤粥庄,失蹤者是張志新(化名)和其女友劉穎丧失,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惜互,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡利花,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年科侈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了载佳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炒事。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蔫慧,靈堂內(nèi)的尸體忽然破棺而出挠乳,到底是詐尸還是另有隱情,我是刑警寧澤姑躲,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布睡扬,位于F島的核電站,受9級(jí)特大地震影響黍析,放射性物質(zhì)發(fā)生泄漏卖怜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一阐枣、第九天 我趴在偏房一處隱蔽的房頂上張望马靠。 院中可真熱鬧,春花似錦蔼两、人聲如沸甩鳄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妙啃。三九已至,卻和暖如春俊戳,著一層夾襖步出監(jiān)牢的瞬間揖赴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工抑胎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留燥滑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓圆恤,卻偏偏與公主長(zhǎng)得像突倍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盆昙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容