当前位置: 首页 > article >正文

Java设计模式—面向对象设计原则(四) ----->接口隔离原则(ISP) (完整详解,附有代码+案例)

文章目录

    • 3.4 接口隔离原则(ISP)
      • 3.4.1 概述
      • 3.4.2 案列

3.4 接口隔离原则(ISP)

接口隔离原则:Interface Segregation Principle,简称ISP

3.4.1 概述

客户端测试类不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。

3.4.2 案列

面看一个例子来理解接口隔离原则:

【例】安全门案例

需求:创建一个学校品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。类图如下:

在这里插入图片描述

// 防盗门
public interface SafetyDoor {
    //防盗功能
    public abstract void antiTheft();
    // 防火功能
    public abstract void fireproof();
    // 防水功能
    public abstract void waterproof();
}
==========================================================
  //学校防盗门类 实现防盗门接口
  public class SchoolDoor implements SafetyDoor {

    @Override
    public void antiTheft() {
        System.out.println("防盗");
    }

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

    @Override
    public void waterproof() {
        System.out.println("防水");
    }
}
============================================================
  public class ClientTest {
    public static void main(String[] args) {

        // 创建学校防盗门对象
        SchoolDoor schoolDoor = new SchoolDoor();
        // 调用方法实现防盗门的功能
        schoolDoor.antiTheft();
        schoolDoor.waterproof();
        schoolDoor.fireproof();
    }
}

上述代码看似实现了需求的功能,但是如果加入新增一个家庭品牌的安全门,有防盗功能和防火功能,此时如果再定义一个家庭安全门类去实现安全门的接口会造成家庭安全门被迫去实现防水功能,这就违背了接口隔离原则。

根据接口隔离原则,改进如下:

在这里插入图片描述

// 防盗接口
public interface AntiTheft {
    public abstract void antiTheft();
}
===========================================================
  // 防火接口
public interface Fireproof {
    public abstract void fireproof();
}
===========================================================
  // 防水接口
public interface Waterproof {
    public abstract void waterproof();
}
==========================================================
  //创建学校防盗门,实现该有功能的接口
nmpublic class SchoolDoor implements AntiTheft,Fireproof,Waterproof{
    @Override
    public void antiTheft() {
        System.out.println("防盗");
    }

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

    @Override
    public void waterproof() {
        System.out.println("防水");
    }
}
=========================================================
  //新增家庭品牌安全门 实现该有功能的接口
  public class HomeDoor implements AntiTheft,Fireproof{
    @Override
    public void antiTheft() {
        System.out.println("防盗");
    }

    @Override
    public void fireproof() {
        System.out.println("防火");
    }
}
===========================================================
  public class ClientTest {
    public static void main(String[] args) {
        // 创建学校防盗门
        SchoolDoor s = new SchoolDoor();
        // 实现学校防盗门功能
        s.fireproof();
        s.waterproof();
        s.antiTheft();
      
        // 创建家庭品牌安全门
        HomeDoor homeDoor = new HomeDoor();
        //实现家庭品牌安全门的功能
        homeDoor.antiTheft();
        homeDoor.fireproof();
    }
}

http://www.kler.cn/a/312204.html

相关文章:

  • 论软件维护及其应用子问题
  • 《AI 使生活更美好》
  • 项目模块十七:HttpServer模块
  • 【智谱开放平台-注册/登录安全分析报告】
  • 大数据技术在金融风控中的应用
  • 【大数据学习 | HBASE高级】region split机制和策略
  • 基于JavaWeb开发的java+Springboot操作系统教学交流平台详细设计实现
  • 探索AI大模型的未来:电信运营商与云服务商的新征途@附58页PDF文件下载
  • liunx 计划任务
  • VRRP协议原理
  • 《计算机网络名词解释》
  • 【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
  • 量化交易软件、接口、API、区别、用法,有什么好用的么
  • Vue2中路由的介绍和使用
  • UDS诊断-面试题2
  • 掌握Protobuf精髓:深入解析.proto文件语法及高效应用
  • 蓝桥杯4. Fizz Buzz 经典问题
  • sql基础语法及常见函数等
  • 解决:The play() request was interrupted by a call to pause().报错
  • Android Glide:让图片加载从未如此简单
  • 14_input子系统my_touch_device,my_touch_handlerLinux内核模块
  • Android 将EasyPermissions进一步封装,使得动态权限申请更加简明
  • Java 23、JDK 23正式发布!
  • C++之第十二课
  • 红日药业携手实在智能,构建RPA数字员工平台满足业务一体化需求 | 实在RPA案例
  • Java 多态(难)