设计模式七大原则之接口隔离原则

设计模式七大原则之接口隔离原则

什么是接口隔离原则

一个类对另一个类的依赖应该建立在最小的接口上。

举个栗子

在这里插入图片描述

interface Animal {
    void run();
    void fly();
    void swim();
    void eat();
    void sleep();
}

class Bird implements Animal {
    @Override
    public void run() { }

    @Override
    public void fly() { System.out.println("Bird fly..."); }

    @Override
    public void swim() { }

    @Override
    public void eat() { System.out.println("Bird eat..."); }

    @Override
    public void sleep() { System.out.println("Bird sleep..."); }
}

class Fish implements Animal {
    @Override
    public void run() { }

    @Override
    public void fly() { }

    @Override
    public void swim() { System.out.println("Fish swim..."); }

    @Override
    public void eat() { System.out.println("Fish eat..."); }

    @Override
    public void sleep() { System.out.println("Fish sleep..."); }
}

class Human implements Animal {
    @Override
    public void run() { System.out.println("Human run..."); }

    @Override
    public void fly() { System.out.println("Human fly airplanes..."); }

    @Override
    public void swim() { System.out.println("Human swim..."); }

    @Override
    public void eat() { System.out.println("Human eat..."); }

    @Override
    public void sleep() { System.out.println("Human sleep..."); }
}

Bird类除了基础的eat和sleep方法外,仅需要一个fly方法,但Animal接口中却规定了两个Bird所不需要的方法,Fish类同理(一般的鸟不会跑和游泳,一般的鱼也不会飞和跑),不遵循接口隔离原则。

此时需要对Animal接口进行拆分:
在这里插入图片描述

interface BaseAnimal {
    void eat();
    void sleep();
}

interface Flyable {
    void fly();
}

interface Swimable {
    void swim();
}

interface Runable {
    void run();
}

class Bird implements BaseAnimal, Flyable {
    @Override
    public void fly() { System.out.println("Bird fly..."); }

    @Override
    public void eat() { System.out.println("Bird eat..."); }

    @Override
    public void sleep() { System.out.println("Bird sleep..."); }
}

class Fish implements BaseAnimal, Swimable {
    @Override
    public void swim() { System.out.println("Fish swim..."); }

    @Override
    public void eat() { System.out.println("Fish eat..."); }

    @Override
    public void sleep() { System.out.println("Fish sleep..."); }
}

class Human implements BaseAnimal, Flyable, Swimable, Runable {
    @Override
    public void run() { System.out.println("Human run..."); }

    @Override
    public void fly() { System.out.println("Human fly airplanes..."); }

    @Override
    public void swim() { System.out.println("Human swim..."); }

    @Override
    public void eat() { System.out.println("Human eat..."); }

    @Override
    public void sleep() { System.out.println("Human sleep..."); }
}

现在来看,Bird类仅需要实现Flyable接口和BaseAnimal接口中的方法而无需实现游泳和跑的方法,Fish类仅需要实现Swimable接口和BaseAnimal接口中的方法而无需实现飞和跑的方法,Human由于可以使用工具上天入地,因此需要实现Flyable、Swimable、Runable和BaseAnimal四个接口。

既保证了功能,又去除了不需要的方法实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值