Skip to content

接口隔离原则 #10

@bitfishxyz

Description

@bitfishxyz

接口隔离原则

什么是接口隔离原则?就是避免出现一些太臃肿的接口。粗粒度的接口无法拆分,但是细粒度的接口可以组合。

比如下面这个例子:

interface IAnimal{
    void eat();
    void fly();
    void swim();
}

我们定义了这样的接口,然后现在我们想实现一个Fish类,我们只能这样写:

class Fish implements IAnimal{
    @Override
    public void eat() {
    }

    @Override
    public void fly() {
    }

    @Override
    public void swim() {
    }
}

但是这样的缺陷非常明显,Fish可以swim,但是不能fly。我们不得不留下一个空接口。

所以我们可以这把上面的接口拆分一下:

interface ICanEatAnimal{
    void eat();
}
interface ICanFlyAnimal{
    void fly();
}
interface ICanSwimAnimal{
    void swim();
}

class Fish implements ICanEatAnimal, ICanSwimAnimal{
    @Override
    public void eat() {
    }

    @Override
    public void swim() {
    }
}

这样似乎不错,但是上面的接口拆封的过细了。没有那个动物可以不eat,所以上面的接口可以组合一下:

interface IAnimal{
    void eat();
}
interface ICanFlyAnimal extends IAnimal{
    void fly();
}
interface ICanSwimAnimal extends IAnimal{
    void swim();
}

class Fish implements ICanSwimAnimal{
    @Override
    public void eat() {
    }

    @Override
    public void swim() {
    }
}

这样就好多了。即足够细分,又不过与松散。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions