OOP 面向對象 七大原則 (二)html
上一篇寫到了前四個原則,這一篇繼續~~oop
接口隔離:客戶端不該該依賴它不須要的接口;一個類對另外一個類的依賴應該創建在最小的接口上。this
又是一句大白話~就是說接口儘可能的要細化,接口中的方法也要儘可能的少spa
/** * oop 接口隔離原則實現 * @author gongliying * @date 2019-06-15 */ achieve(){ class cosmetics { constructor(name) { this.name = name } color() { console.log(this.name, "顏色") } efficacy() { console.log(this.name, "滋潤保溼") } size() { console.log(this.name, "粗細") } } class lipstick extends cosmetics {} class eyeliner extends cosmetics {} let kouhong = new lipstick("口紅") kouhong.color() // 口紅 顏色 kouhong.efficacy() // 口紅 滋潤保溼 kouhong.size() // 口紅 粗細 let yanying = new eyeliner("眼影") yanying.color() //眼影 顏色 yanying.efficacy() //眼影 滋潤保溼 yanying.size() // 眼影 粗細 },
我這樣的確是都實現了,可是有沒有感受特別的emmmm冗餘,並且邏輯上好像仍是有點不對??? 由於口紅並無粗細啊 眼影我也尚未聽過有滋潤保溼的啊,這樣的話有一些方法在繼承的時候就顯得有點多餘了,官方的話就是--客戶端不該該依賴他不須要的接口,htm
更改以下對象
/** * oop 接口隔離原則實現 * @author gongliying * @date 2019-06-15 */ achieve(){ class cosmetics { constructor(name) { this.name = name } color() { console.log(this.name, "顏色") } } class lipstick extends cosmetics { efficacy() { console.log(this.name, "滋潤保溼") } } class eyeliner extends cosmetics { size() { console.log(this.name, "粗細") } } let kouhong = new lipstick("口紅") kouhong.color() //口紅 顏色 kouhong.efficacy() //口紅 滋潤保溼 let yanying = new eyeliner("眼影") yanying.color() //眼影 顏色 yanying.size() //眼影 粗細 },
這樣看起來是否是很好了,擁有了共同的方法,也有本身的方法,將接口細化,提升靈活性(官話),不依賴不須要的接口,這就是接口分離blog
迪米特原則:迪米特原則又叫最少知識原則,是一個類應該對其餘的類有最少的瞭解,由於當一個類發生改變的時候,另外一個以來的類也會發生相應的改變,兩個類之間依賴程度越大,耦合性越高,改變的類越多,相依賴的類影響更大,爲了解決這種狀況,提出了迪米特法則,減小相應類的依賴繼承
以中介者模式爲例,固然仍是個人化妝品~~~接口
/** * oop 接口隔離原則實現 * @author gongliying * @date 2019-06-15 */ achieve(){ class cosmetics{ daub(){ console.log('抹了什麼?') } } class kouhong extends cosmetics{ go(){ return "抹了口紅" } } class yanying extends cosmetics{ go(){ return "抹了眼影" } } class people { constructor(name) { this.name = name } gotoEat(mo) { console.log(this.name, mo.go()) } } kouhong = new kouhong yanying = new yanying let gong = new people('宮') kouhong.daub() //抹了什麼? gong.gotoEat(kouhong) //宮 抹了口紅 gong.gotoEat(yanying) //宮 抹了眼影 },
組合聚合複用原則:組合/聚合複用原則常常又叫作合成複用原則。該原則就是在一個新的對象裏面使用一些已有的對象,使之成爲新對象的一部分:新的對象經過向這些對象的委派達到複用已有功能的目的。這裏提示!!!要儘可能的使用組合聚和原則,儘可能不要使用繼承,由於在子類繼承父類的時候,父類把細節所有暴露給了子類,而且在父類發生改變的時候,子類也會相應發生改變,不利於類的擴展,耦合性比較高,而組合聚和原則他們的新對象與已有對象的emmmmm‘溝通’都是經過抽象類進行呢,可以避免繼承的缺點,而且符合單一原則生命週期
什麼是合成?合成表示一種強的擁有關係,體現了嚴格的部分和總體的關係,部分和總體的生命週期同樣,打個比方:人有兩個胳膊,胳膊和人就是部分和總體的關係,人去世了,那麼胳膊也就沒用了,也就是說胳膊和人的生命週期是相同的
什麼是聚合?聚合表示一種弱的擁有關係,體現的是A對象能夠包含B對象,可是B對象並非A對象的一部分,打個比方:人是羣居動物,因此每一個人屬於一我的羣,一我的羣能夠有多我的,因此人羣和人是聚合的關係