关于javascript:JavaScript-中的-SOLID-原则四I代表什么

本篇是SOLID准则的第四局部,倡议先浏览前三局部:

JavaScript 中的 SOLID 准则(一):“S”代表什么

JavaScript 中的 SOLID 准则(二):“O”代表什么

JavaScript 中的 SOLID 准则(三):“L”代表什么

这是SOLID的第四篇文章(原文一共五篇),作者是serhiirubets,欢送继续关注。

接口隔离准则(Interface Segregation Principle)

I – 接口隔离准则。这个准则是指:客户端不应该依赖他们不应用的接口(接口应该是精简的,领有尽可能少的行为)。

这是什么意思? 这个准则是对于接口的,然而在JavaScript中没有接口,不过有相似的货色,那就是类。尽管两者不一样,然而这个准则能够利用到JS类上。

对于JS类来说,这个准则是指当咱们创立一个根底类,须要在其中定义所有子类都会用到的办法,并且防止只有局部子类会用到的办法。

举个简略的例子,当咱们创立一个Transport的根底类并增加以下办法:move、stop、fly和sail。示例中的办法只增加了console.log,理论利用中对应的应该是真正的业务逻辑。

class Transport {
  move() {
    console.log('move');
  }
  stop() {
    console.log('stop');
  }
  fly() {
    console.log('fly');
  }
  sail() {
    console.log('sail');  
  }
}

咱们再创立三个子类:Plane, Car 和 Ship。

class Plane extends Transport {
  sail() {
    return null;
  }
}
class Car extends Transport {
  fly() {
    return null ;
  }
  sail() {
    return null;
  }
}
class Ship extends Transport {
  fly() {
    return null ;
  }
}

你可能留神到了,每个子类中重写了继承的办法,并返回了null。为什么这么做呢,拿Plane举例,飞机能够fly和move,然而不能sail(船类航行)。

咱们的基类蕴含了sail逻辑,然而飞机不能sail。咱们应该做一些事件,因为有人可能会调用plane实例上的sail办法,咱们能够抛出谬误或者像当初一样重写sail办法。其余两个类也是应用同样的解决形式,Car重写了fly和sail,ship重写了fly。

所以问题在于:咱们创立的基类蕴含的办法,有的子类能够应用,但其余的子类不能。这就是接口隔离准则所指的:咱们不应该在基类中创立子类不会应用到的逻辑。

当然,这个和多态没有关系,如果咱们创立了一个通用的办法,然而每个子类都会重写这个办法逻辑,是能够的。

举个例子:咱们有一个Animal基类,蕴含一个breathe办法,它的子类也能够breathe然而应用了不同的形式,咱们能够应用多态:

class Animal {
  breath() {
    console.log('common breath')
  }
}
class Human extends Animal {
  breath() {
    console.log('lung breath')
  }
}
class Fish extends Animal {
  breath() {
    console.log('gills breath')
  }
}

再重温一下接口隔离准则:正确的在基类中创立办法,这些办法应该被继承的子类所应用。

那么咱们怎么解决Transport类中的问题呢?咱们能够创立更具体的子类,子类中蕴含只有本身会应用到的办法:

class Transport {
  move() {
    console.log('move')
  }
  stop() {
    console.log('stop')
  }
}
class FlyingTransport extends Transport {
  fly() {
    console.log('fly')
  }
}
class SailingTransport extends Transport {
  sail() {
    console.log('sail')
  } 
}
class Car extends Transport {}
class Plane extends FlyingTransport {}
class Ship extends SailingTransport {}

当初咱们的Transport基类蕴含了move和stop两个办法,这两个办法能够用在所有的子类。咱们还创立了两个具体的子类,plane能够继承FlyingTransport,轮船能够继承SailingTransport。

这就是“SOLID”准则中“I”的含意:这个准则次要的目标是让代码领有良好的层次结构,尽量不要在基类中创立子类不须要的办法。

欢送关注微信公众号”混沌前端“

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据