OOP 面向對象 七大原則 (二)

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對象的一部分,打個比方:人是羣居動物,因此每一個人屬於一我的羣,一我的羣能夠有多我的,因此人羣和人是聚合的關係

相關文章
相關標籤/搜索