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# 截取窗口图像(包括遮挡窗口,最小化窗口)
    C# 自定义DevExpress中XtraMessageBox的窗口Icon
    C# DevExpress的皮肤,没有在多线程中应用
    DevExpress的RibbonForm在WIN7下标题栏透明,没应用程序设置的Skin
    C# RibbonForm的标题Text显示不完全的解决方法
    C# 使用递归获取文件路径,不获取拒绝访问的文件夹
    socket使用
    KMP模板
    HDU1358(KMP)
    windows环境变量
  • 原文地址:https://www.cnblogs.com/sxldy/p/11276836.html
Copyright © 2011-2022 走看看