接口隔离原则

一 点睛

客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。
在这里插入图片描述

二 需求

安全门案例:我们需要创建一个黑马品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。

三 反例

1 类图

在这里插入图片描述

2 代码

SafetyDoor

public interface SafetyDoor {
    // 防盗
    void antiTheft();
    // 防火
    void fireProof();
    // 防水
    void waterProof();
}

HeimaSafetyDoor

public class HeimaSafetyDoor implements SafetyDoor {
    public void antiTheft() {
        System.out.println("防盗");
    }
    public void fireProof() {
        System.out.println("防火");
    }
    public void waterProof() {
        System.out.println("防水");
    }
}

Client

public class Client {
    public static void main(String[] args) {
        HeimaSafetyDoor door = new HeimaSafetyDoor();
        door.antiTheft();
        door.fireProof();
        door.waterProof();
    }
}

3 测试

防盗
防火
防水

4 分析

上面的设计我们发现了它存在的问题,黑马品牌的安全门具有防盗,防水,防火的功能。现在如果我们还需要再创建一个传智品牌的安全门,而该安全门只具有防盗、防水功能呢?很显然如果实现SafetyDoor接口就违背了接口隔离原则,那么我们如何进行修改呢?

四 正例

1 类图

在这里插入图片描述

2 代码

AntiTheft(接口):

public interface AntiTheft {
    void antiTheft();
}

Fireproof(接口):

public interface Fireproof {
    void fireproof();
}

Waterproof(接口):

public interface Waterproof {
    void waterproof();
}

HeiMaSafetyDoor(类):

public class HeiMaSafetyDoor implements AntiTheft,Fireproof,Waterproof {
    public void antiTheft() {
        System.out.println("防盗");
    }

    public void fireproof() {
        System.out.println("防火");
    }


    public void waterproof() {
        System.out.println("防水");
    }
}

ItcastSafetyDoor(类):

public class ItcastSafetyDoor implements AntiTheft,Fireproof {
    public void antiTheft() {
        System.out.println("防盗");
    }

    public void fireproof() {
        System.out.println("防火");
    }
}

Client(类):

public class Client {
    public static void main(String[] args) {
        // 创建黑马安全门对象
        HeimaSafetyDoor door = new HeimaSafetyDoor();
        // 调用功能
        door.antiTheft();
        door.fireProof();
        door.waterProof();
        System.out.println("============");
        // 创建传智安全门对象
        ItcastSafetyDoor door1 = new ItcastSafetyDoor();
        // 调用功能
        door1.antiTheft();
        door1.fireproof();
    }
}

3 测试

防盗
防火
防水
============
防盗
防火
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值