物件導向之 開閉原則

樹下的老大爺發表於2019-07-31

  我覺得開閉原則,就是對擴充套件開放對修改關閉,在我們寫程式碼過程中,程式碼“寫死”,就是因為沒有遵循開閉原則來實現程式碼。就好比蓋房子一樣,地基就好比你的基礎類,地基上面的房子就好比你的實現類,這時候房主說在房子上加一些修飾導致你必須修改地基,如果你去改變地基,你上面的房子都會受到影響,這時候你就會修補房子,讓房子不會因為地基的修改而倒塌。如果這時候房主在說一些新的需求,而你的地基不足以支撐房主的需求,這時候你就可能要推倒重蓋,為什麼造成這種情況,就是因為你當初在搭建地基的時候沒有遵循開閉原則,不支援對新需求的進行擴充套件。

  下面用程式碼 說說開閉原則的好處

class house{
    constructor(name){
        this.name = name
        this.int()
    }
    int(){
        console.log('搭建'+this.name+'流程:')
     this.base();
     this.wall();
     this.roof(); }
//地基 base(){ console.log('搭建地基') } //牆壁 wall(){ console.log('搭建牆壁') } //房頂 roof(){ console.log('搭建房頂') } } //建立普通民房 new house('普通民房')

 //搭建普通民房流程:
 //搭建地基
 //搭建牆壁
 //搭建房頂

house就是我建立的一個基礎類,能製造出一個普通民房,如果我用它建立一個別墅那?別墅是不是得有陽臺啊(我朋友工地得想抬槓找我,我幫你找份兼職),新需來了,然後我就在基礎類上新增一個搭建陽臺
class house{
    //在house類裡面新增//陽臺   
    balcony(){
        console.log('搭建陽臺')
    }
}
//建立普通民房
new house('普通民房')
//建立別墅
new house('別墅')
//搭建普通民房流程:
//搭建地基
//搭建牆壁
//搭建房頂
//搭建陽臺
//搭建別墅流程:
//搭建地基
//搭建牆壁
//搭建房頂
//搭建陽臺

上面看到 普通民房怎麼會有陽臺那,這就是沒有對修改得關閉,造成了普通民房也有了陽臺。那普通民房肯定不能有陽臺啊,但是我也得建造別墅帶陽臺呀,這時候我們就需要了對其進行擴充套件

class villa extends house{
    constructor(name){
        super(name)
        this.balcony();
    }
    //陽臺
    balcony(){
        console.log('搭建陽臺')
    }
}
//建立普通民房
new house('普通民房')
//建立別墅
new villa('別墅')
//搭建普通民房流程:
//搭建地基
//搭建牆壁
//搭建房頂
//搭建別墅流程:
//搭建地基
//搭建牆壁
//搭建房頂
//搭建陽臺
  我建立了villa類對基礎類進行了擴充套件,並且沒有對基礎類進行修改,符合了開閉原則得要求,實現了既能建造普通房屋,也通過擴充套件建造了別墅,避免了民房也出現陽臺得現象。
  在我們建立基礎類時,我們要想到 建造房屋共同得特性,明確制定基礎類之後不允許在進行修改,所以在我們寫程式碼的時候不要著急去實現程式碼,要想到以後擴充套件得可能性,預留擴充套件介面,讓你的程式碼能夠支撐住新的需求,還有不要修改
基礎類,修改基礎類得時候,會影響你其他依賴基礎的類,然後你就要去改動你依賴基礎類的其他類,造成你修改程式碼的痛苦,最後可能就需要程式碼的重構,所以寫程式碼的時候不要怕麻煩,要想好怎麼寫才能更好的擴充套件。
  最後在說一遍 對修改關閉,對擴充套件開放 這就是開閉原則

相關文章