zoukankan      html  css  js  c++  java
  • js实现接口隔离

    昨天公司培训了接口隔离,简单说一下

    接口隔离:类间的依赖关系应该建立在最小的接口上。接口隔离原则将非常庞大、臃肿的接口拆分成更小具体的接口,这样客户讲会只需要知道他们感兴趣的方法。

    接口隔离原则的目的是系统解开耦合,从而容易重构、更改和重新部署。

    先贴一个错误示范

     class animal {//动物类
                constructor(name) {
                    this.name = name
                }
                eat() {
                    console.log(this.name, "吃饭")
                }
                run() {
                    console.log(this.name, "游了起来")
                }
                fly() {
                    console.log(this.name, "飞了起来")
                }
            }
    
            class fish extends animal {}
            class bird extends animal {}
    
    
            fishA = new fish("鱼")
            fishA.eat()
            fishA.run()
            fishA.fly()
    
            birdA = new bird("老鹰")
            birdA.eat()
            birdA.run()
            birdA.fly()

    假设吧所有的方法都放在一个接口去实现的话,会让你的接口看起来很臃肿

    方法多了的话不能一眼找到你想要的方法,而且多余的这个方法也就没有必要

    改进的方法就是说,比如鱼的方法或鹰的方法抽离出来,做到接口隔离,具体如下

    class animal {//动物类
                constructor(name) {
                    this.name = name
                }
                eat() {//是动物就会吃东西
                    console.log(this.name, "吃饭")
                }
                
            }
    
            class fish  extends animal{
                       
                run() {
                    console.log(this.name, "游了起来")
                }
            }
    
            class bird extends animal{
                       
                run() {
                    console.log(this.name, "飞了起来")
                }
            }
    
            fishA=new fish("鱼")
            fishA.eat()
            fishA.run()
    
    
            birdA=new bird("老鹰")
            birdA.eat()
            birdA.run()

    具体结果如下

    这样的话看起来就正常多了,日后添加新的方法或者抽象类的话,不会让代码变得很臃肿,也比较清晰

    but。。。  总感觉哪里不太满意,这个东西总是让我莫名其妙的想到抽象工厂,折腾半天找出来这么一个东西

    这个东西就是子类继承父类,但是子类不能用构造函数了

    ES6里讲的如果想用Class实现类的继承,那么在子类的构造函数中必须使用super()。否则你就只能通过让子类构造函数返回一个对象。

    具体例子请移步我的抽象工厂博客 https://www.cnblogs.com/netUserAdd/p/10404150.html

    如有讲的不对或不足之处请大家批评指正

  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/netUserAdd/p/10455902.html
Copyright © 2011-2022 走看看