软件设计原则——接口隔离原则
客户端不应该被迫依赖于它不使用的方法;
一个类对另一个类的依赖应该建立在最小的接口上。
【例】安全门案例
我们需要创建一个黑马
品牌的安全门,该安全门具有防火、防水、防盗的功能。
可以将防火,防水,防盗功能提取成一个接口,形成一套规范。
类图如下:
SafetyDoor.java
package com.itheima.principles.demo4.before;/*** @version v1.0* @ClassName: SafetyDoor* @Description: 安全门接口* @Author: dym*/
public interface SafetyDoor {//防盗void antiTheft();//防火void fireProof();//防水void waterProof();
}
HeimaSafetyDoor.java
package com.itheima.principles.demo4.before;/*** @version v1.0* @ClassName: HeimaSafetyDoor* @Description: 黑马品牌的安全门* @Author: dym*/
public class HeimaSafetyDoor implements SafetyDoor {public void antiTheft() {System.out.println("防盗");}public void fireProof() {System.out.println("防火");}public void waterProof() {System.out.println("防水");}
}
Client.java
package com.itheima.principles.demo4.before;/*** @version v1.0* @ClassName: Client* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class Client {public static void main(String[] args) {HeimaSafetyDoor door = new HeimaSafetyDoor();door.antiTheft();door.fireProof();door.waterProof();}
}
上面的设计我们发现了它存在的问题,黑马品牌的安全门具有防盗,防水,防火的功能。
现在如果我们还需要再创建一个传智品牌的安全门,而该安全门只具有防盗、防水功能呢?
很显然如果实现SafetyDoor接口就违背了接口隔离原则,那么我们如何进行修改呢?
看如下类图:
AntiTheft.java
package com.itheima.principles.demo4.after;/*** @version v1.0* @ClassName: AntiTheft* @Description: 防盗接口* @Author: dym*/
public interface AntiTheft {void antiTheft();
}
Fireproof.java
package com.itheima.principles.demo4.after;/*** @version v1.0* @ClassName: Fireproof* @Description: 防火接口* @Author: dym*/
public interface Fireproof {void fireproof();
}
Waterproof.java
package com.itheima.principles.demo4.after;/*** @version v1.0* @ClassName: Waterproof* @Description: 防水接口* @Author: dym*/
public interface Waterproof {void waterproof();
}
HeiMaSafetyDoor.java
package com.itheima.principles.demo4.after;/*** @version v1.0* @ClassName: HeiMaSafetyDoor* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
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.java
package com.itheima.principles.demo4.after;/*** @version v1.0* @ClassName: ItcastSafetyDoor* @Description: 传智安全门* @Author: dym*/
public class ItcastSafetyDoor implements AntiTheft,Fireproof {public void antiTheft() {System.out.println("防盗");}public void fireproof() {System.out.println("防火");}
}
Client.java
package com.itheima.principles.demo4.after;import com.itheima.principles.demo4.before.HeimaSafetyDoor;/*** @version v1.0* @ClassName: Client* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
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();}
}
软件设计原则——接口隔离原则相关推荐
- 【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )
文章目录 一.接口隔离原则简介 二.接口隔离原则代码示例 ( 反面示例 ) 1.接口定义 ( 接口臃肿 ) 2.实现类 1 3.实现类 2 三.接口隔离原则代码示例 ( 推荐用法 ) 1.接口 1 2 ...
- 设计模式系列(二)七大设计原则-----接口隔离原则
七大设计原则之单一接口隔离原则 接口隔离原则 案例 应用实例 改进 上一篇:设计模式系列(一)七大设计原则-----单一职责原则 下一篇:设计模式系列(三)七大设计原则-----依赖倒转原则 接口隔离 ...
- 六大设计原则-接口隔离原则
1.开闭原则 2.接口隔离原则 3.依赖倒置原则 4.迪米特原则 5.里氏替换原则 6.单一职责原则 接口隔离原则 客户端不应该依赖它不需要的接口:一个类 ...
- java设计模式之设计原则④接口隔离原则
定义: (1)用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口. (2)一个类对一个类的依赖应该建立在最小的接口上. (3)建立单一接口,不要建立庞大臃肿的接口. (4)尽量细化 ...
- 设计原则——接口隔离原则
1.全称 Interface Segregation Principle 缩写为:ISP 2.解释 要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法 单一职责原 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- Java七大设计原则 - 接口隔离原则
一.什么是 接口隔离原则 (Interface Segregation Principle) ? 原则含义: 一个类对于另外一个类的依赖应该建立在最小的接口上 1. 接口隔离原则" 实际上它 ...
- 设计模式原则 - 接口隔离原则(二)
接口隔离原则 一 官方定义 二 案例演示 普通方案 案例分析 解决方案 解决方案 案例总结 三 与单一职责原则对比 一 官方定义 接口隔离原则(Interface Segregation Princi ...
- 面向对象六大原则——接口隔离原则
什么是接口隔离原则(Interface Segregation Principle, ISP) 接口对于Java开发者来说都不陌生,它几乎存在于每一个Java程序中,是抽象的代名词.在讲接口隔离原则 ...
最新文章
- 2021-08-05 Ubuntu18.04安装ROS出现的一些问题
- JS URL 编码 PHP 解码{%u5F00%u53D1}
- Cassandra 单机入门例子——有索引
- python安装虚拟环境没有activate_Python venv虚拟环境:Activate命令的作用
- 黄仁勋登上《时代周刊》2021年度全球具影响力人物
- html 获得文本节点,JavaScript获取节点——获取文本节点
- LinearLayout和RelativeLayout 区别
- 数学--数论-- HDU6298 Maximum Multiple 打表找规律
- [react] React怎么判断什么时候重新渲染组件呢
- [css] 如何自定义radio按钮的样式
- Nature子刊:中科院动物所合作揭示灵长类血管衰老的驱动力
- javascript实现页面中回到顶部功能
- 论文笔记(3):STC: A Simple to Complex Framework for Weakly-supervised Semantic Segmentation
- maven部署项目到tomcat8中
- css总常用的font-family
- clover如何使用UEFI引导和EFI驱动选择
- Java画图板界面上的添加
- 一个月薪5k+的广州安全服务实习生的真实生活
- Java多态中的 向上转型/向下转型
- 2022深圳国际医疗器械展览会