zoukankan      html  css  js  c++  java
  • 面向对象之 开闭原则

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

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

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

  • 相关阅读:
    C#读写XML no
    ComboBox、ListBox绑定和获取数据 no
    win7 安装oracle 11g no
    2011没有惊天动地 no
    Oracle 删除重复数据只留一条 no
    Oracle 创建用户并分配权限 no
    Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...) no
    谢谢,博客园这么快就审批通过了我的申请!
    Eclipse 中 JAVA AWT相关包不提示问题(解决)
    Eclipse java项目转Maven项目
  • 原文地址:https://www.cnblogs.com/sxldy/p/11276836.html
Copyright © 2011-2022 走看看