SOLID原则(二):“O”代表什么JavaScript中SOLID原则(三):“L”代表接口隔离原则(Interface隔离原则)I-接口隔离原则。这个原则意味着:客户不应该依赖于他们不使用的接口(接口应该是精简的,尽可能少的行为)。这是什么意思?这个原则是关于接口的,但是在JavaScript中没有接口,但是有类似的东西,就是类。两者虽然不同,但是这个原理可以应用到JS类中。对于JS类,这个原则意味着我们在创建基类的时候,需要定义所有子类都会用到的方法,避免只有部分子类会用到的方法。举个简单的例子,当我们创建一个Transport基类并添加以下方法时:move、stop、fly和sail。例子中的方法只是增加了console.log,实际应用中应该是真正的业务逻辑。类运输{移动(){console.log('移动');}停止(){console.log('停止');}fly(){console.log('fly');}sail(){console.log('sail');}}让我们再创建三个子类:Plane、Car和Ship。类平面扩展运输{帆(){返回空;}}classCarextendsTransport{fly(){returnnull;}帆(){返回空;}}classShipextendsTransport{fly(){returnnull;您可能已经注意到,每个子类都会重写继承的方法并返回null。你为什么这么做?以飞机为例。飞机可以飞行和移动,但不能航行(船舶航行)。我们的基类包含航行逻辑,但飞机不能航行。我们应该做点什么,因为有人可能会在飞机实例上调用sail方法,我们可以像现在这样抛出错误或重写sail方法。另外两个类也采用同样的处理方式,Car改写fly和sail,ship改写fly。所以问题是:我们创建了一个基类,其中包含某些子类可以使用但其他子类不能使用的方法。这就是接口隔离原则所指的:我们不应该在子类不会使用的基类中创建逻辑。当然,这与多态无关。如果我们创建了一个通用的方法,但是每个子类都会重写这个方法的逻辑,这是有可能的。例如:我们有一个基类Animal,它包含一个breath方法,它的子类也可以呼吸但是方式不同,我们可以使用多态:classAnimal{breath(){console.log('commonbreath')}}classHumanextendsAnimal{breath(){console.log('lungbreath')}}classFishextendsAnimal{breath(){console.log('gillsbreath')}}重温接口隔离原则:正确创建方法基类,这些方法应该被继承的子类使用。那么我们如何解决Transport类中的问题呢?我们可以创建更具体的子类,其中包含只有它们会使用的方法:fly(){console.log('fly')}}classSailingTransportextendsTransport{sail(){console.log('sail')}}classCarextendsTransport{}classPlaneextendsFlyingTransport{}classShipextendsSailingTransport{现在我们的Transport基类包含两个方法,move和stop,它们可以在所有子类中使用。我们还创建了两个具体的子类,plane可以继承FlyingTransport,ship可以继承SailingTransport。这就是“SOLID”原则中“我”的意思:这个原则的主要目的是让代码有一个良好的层次结构,尽量不要在基类中创建子类不需要的方法。欢迎关注微信公众号“混沌前端”
