IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 设计原则之接口隔离原则 -> 正文阅读

[Java知识库]设计原则之接口隔离原则

接口隔离原则(ISP):
客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。不应该强迫客户依赖于它们不用的方法。

ISP的几个使用原则

 根据接口隔离原则拆分接口时,首先必须满足单一职责原则: 
 		没有哪个设计可以十全十美的考虑到所有的设计原则,有些设计原则之间就可能出现冲突,就如同单一职责原则和接口隔离原则,一个考虑的是接口的职责的单一性,一个考虑的是方法设计的专业性(尽可能的少),必然是会出现冲突。
 		在出现冲突时,尽量以单一职责为主,当然这也要考虑具体的情况。
 提高高内聚: 
 		提高接口,类,模块的处理能力,减少对外的交互。比如你给杀手提交了一个订单,要求他在一周之内杀一个人,一周后杀手完成了任务,这种不讲条件完成任务的表现就是高内聚。
 		具体来说就是:要求在接口中尽量少公布public方法,接口是对外的承诺,承诺越少对系统的开发越有利,变更的风险就越小,也有利于降低成本。
 定制服务: 单独为一个个体提供优良服务(只提供访问者需要的方法)。
 接口设计要有限度: 根据经验判断。

案例1:
未遵守接口隔离原则
安全门案例

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

类图
在这里插入图片描述安全门接口

/**
 * @Description: 安全门接口
 */
public interface SafetyDoor {

    //防盗
    void antiTheft();

    //防火
    void fireProof();

    //防水
    void waterProof();
}

黑马品牌安全门的类

/**
 * @Description: 黑马品牌的安全门
 */
public class HeimaSafetyDoor implements SafetyDoor {
    public void antiTheft() {
        System.out.println("防盗");
    }

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

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

测试类


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

测试结果:
在这里插入图片描述

解释说明:

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

案例2:
使用接口隔离原则

类图:
在这里插入图片描述防盗接口

/**
 * @Description: 防盗接口
 */
public interface AntiTheft {
    void antiTheft();
}

防火接口

/**
 * @Description: 防火接口
 */
public interface Fireproof {
    void fireproof();
}

防水接口

/**
 * @Description: 防水接口
 */
public interface Waterproof {
    void waterproof();
}

黑马品牌的安全门类(使用到三个功能方法就实现三个接口)

/**
 * 黑马品牌的安全门
 */
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("防水");
    }
}

传智品牌的安全门(只用到两个功能方法就实现两个接口)

/**
 * @Description: 传智安全门
 */
public class ItcastSafetyDoor implements AntiTheft,Fireproof {
    public void antiTheft() {
        System.out.println("防盗");
    }

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

测试类

/**
 * 测试类
 */
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();
    }
}

测试结果
在这里插入图片描述解释说明:

使用不同的接口定义不同的功能方法,当新增的品牌只用到哪几个功能方法时,只需要实现对应的接口即可,就不会依赖它不需要的功能方法。

结束!!!!!!!


							你看,那个人好像一个条狗。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:26:14  更:2022-05-09 12:26:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:22:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码