sxldy

  我觉得开闭原则,就是对扩展开放对修改关闭,在我们写代码过程中,代码“写死”,就是因为没有遵循开闭原则来实现代码。就好比盖房子一样,地基就好比你的基础类,地基上面的房子就好比你的实现类,这时候房主说在房子上加一些修饰导致你必须修改地基,如果你去改变地基,你上面的房子都会受到影响,这时候你就会修补房子,让房子不会因为地基的修改而倒塌。如果这时候房主在说一些新的需求,而你的地基不足以支撑房主的需求,这时候你就可能要推倒重盖,为什么造成这种情况,就是因为你当初在搭建地基的时候没有遵循开闭原则,不支持对新需求的进行扩展。

  下面用代码 说说开闭原则的好处

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类对基础类进行了扩展,并且没有对基础类进行修改,符合了开闭原则得要求,实现了既能建造普通房屋,也通过扩展建造了别墅,避免了民房也出现阳台得现象。
  在我们创建基础类时,我们要想到 建造房屋共同得特性,明确制定基础类之后不允许在进行修改,所以在我们写代码的时候不要着急去实现代码,要想到以后扩展得可能性,预留扩展接口,让你的代码能够支撑住新的需求,还有不要修改
基础类,修改基础类得时候,会影响你其他依赖基础的类,然后你就要去改动你依赖基础类的其他类,造成你修改代码的痛苦,最后可能就需要代码的重构,所以写代码的时候不要怕麻烦,要想好怎么写才能更好的扩展。
  最后在说一遍 对修改关闭,对扩展开放 这就是开闭原则

相关文章: