一 關(guān)系
依賴(Dependency)
依賴關(guān)系是類與類之間的聯(lián)接钙畔。依賴關(guān)系表示一個類依賴于另一個類的定義晃财。例如赌躺,一個人(Person)可以買車(car)和房子(House)扛伍,Person類依賴于Car類和House類的定義掂榔,因?yàn)镻erson類引用了Car和House探颈。與關(guān)聯(lián)不同的是熟丸,Person類里并沒有Car和House類型的屬性,Car和House的實(shí)例是以參量的方式傳入到buy()方法中去的伪节。一般而言光羞,依賴關(guān)系在Java語言中體現(xiàn)為局域變量、方法的形參怀大,或者對靜態(tài)方法的調(diào)用纱兑。
A ------------> B
A依賴于B,A類中有B類型的局部變量化借、方法型參或者其他潜慎,但是沒有B的成員變量或者屬性。
關(guān)聯(lián)(Association)
關(guān)聯(lián)關(guān)系是類與類之間的聯(lián)接蓖康,它使一個類知道另一個類的屬性和方法铐炫。關(guān)聯(lián)可以是雙向的,也可以是單向的蒜焊。關(guān)聯(lián)關(guān)系一般使用成員變量來實(shí)現(xiàn)倒信。
A -——————> B
A單項(xiàng)關(guān)聯(lián)B,A類中有一個B的成員變量或者屬性泳梆。
聚合(Aggregation)
聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種鳖悠,是強(qiáng)的關(guān)聯(lián)關(guān)系。聚合是整體和個體之間的關(guān)系优妙。例如乘综,汽車類與引擎類、輪胎類鳞溉,以及其它的零件類之間的關(guān)系便整體和個體的關(guān)系瘾带。與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實(shí)例變量實(shí)現(xiàn)的熟菲。但是關(guān)聯(lián)關(guān)系所涉及的兩個類是處在同一層次上的看政,而在聚合關(guān)系中,兩個類是處在不平等層次上的抄罕,一個代表整體允蚣,另一個代表部分。
汽車 ◇—————— > 引擎
組合(Composition)
組合關(guān)系是關(guān)聯(lián)關(guān)系的一種呆贿,是比聚合關(guān)系強(qiáng)的關(guān)系嚷兔。它要求普通的聚合關(guān)系中代表整體的對象負(fù)責(zé)代表部分對象的生命周期森渐,組合關(guān)系是不能共享的。代表整體的對象需要負(fù)責(zé)保持部分對象和存活冒晰,在一些情況下將負(fù)責(zé)代表部分的對象湮滅掉同衣。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由后者負(fù)責(zé)此對象的生命周期壶运。換言之耐齐,代表部分的對象在每一個時(shí)刻只能與一個對象發(fā)生組合關(guān)系,由后者排他地負(fù)責(zé)生命周期蒋情。部分和整體的生命周期一樣埠况。
公司 ◆——————————> 部門
*注
在代碼層面關(guān)聯(lián)、聚合棵癣、組合是一樣的辕翰,但是語義上會有差別。
二 原則
開閉原則 (Open Closed Principle, OCP)
對模塊 擴(kuò)展開放, 對修改關(guān)閉狈谊。 .m里面的實(shí)現(xiàn)代碼不改變(通過擴(kuò)展子類來擴(kuò)喜命,修改或者擴(kuò)展功能)
該原則是一個最理想狀態(tài)。里氏代換原則 (Liskov Substitution Principle , LSP)
任何類可以出現(xiàn)的地方, 子類一定可以出現(xiàn), 子類跟父類可以相互替換,子類可以用父類所有的方法的畴。該原則和接口隔離原則互斥渊抄。
和多肽的區(qū)別:多肽是重寫父類的方法,而里氏替換原則則不能重現(xiàn)父類方法丧裁。依賴倒轉(zhuǎn)原則 (Dependency Inversion Principle, DIP)
抽象(接口)不依賴于細(xì)節(jié)(具體實(shí)現(xiàn)),細(xì)節(jié)依賴于抽象护桦。(一般指的是接口)
再說白點(diǎn),就是多用類似于 id<協(xié)議> 這種形式煎娇,而設(shè)計(jì)的時(shí)候也是要以這種形式而去設(shè)計(jì)二庵。接口隔離原則 (Interface Segregation Principle, ISP)
接口里面只做必要的事情 不做其他相關(guān)的事情。該原則和里氏代換原則互斥缓呛。合成/聚合復(fù)用原則 (Composite/ Aggregate Reuse Principle, CARP)
需要從一個類擴(kuò)展出另外一種方法,盡量不要使用繼承(而是用聚合來擴(kuò)展),使用新的方法催享。最小知識原則 (Principle of Least Knowledge, PLK)
兩個類沒有彼此直接通信. 而是使用另一個類來通信。單一職責(zé)原則 (Single responsibility principle, SRP)
一個類只負(fù)責(zé)一個功能領(lǐng)域哟绊。