设计模式原则 - 接口隔离原则(二)
接口隔离原则
- 一 官方定义
- 二 案例演示
- 普通方案
- 案例分析
- 解决方案
- 解决方案
- 案例总结
- 三 与单一职责原则对比
一 官方定义
接口隔离原则(Interface Segregation Principle),又称为ISP原则,官方定义为:
- Clients should not be forced to depend upon interfaces that they don’t use.
(客户端不应该依赖它不需要的接口)- The dependency of one class to another one should depend on the smallest possible
interface. (类间的依赖关系应该建立在最小的接口上)
基本介绍
通俗的来讲,不要在一个接口里面定义过多的方法,接口应该尽量细化
二 案例演示
假设有这样一个案例场景,现在有一个接口knife,给定他有三个能力,可以切苹果,切番茄,切土豆, 两个类张厨师,李厨师分别具有这些能力,有一个水果店类,假设是需要张师傅来切苹果和切番茄,而另一个蔬菜店类需要李师傅来切番茄和切土豆
普通方案
public class SegregationDemo {public static void main(String[] args) {//水果店类new FruitShop().cutApple(new CookZhang());new FruitShop().cutTomato(new CookZhang());//蔬菜店类new VegetableShop().cutTomato(new CookLi());new VegetableShop().cutPotato(new CookLi());}
}
// 定义接口knife
interface Knife {//切苹果的能力void cutApple();//切番茄的能力void cutTomato();//切土豆的能力void cutPotato();
}//张厨师类
class CookZhang implements Knife {@Overridepublic void cutApple() {System.out.println("张厨师正在切苹果");}@Overridepublic void cutTomato() {System.out.println("张厨师正在切番茄");}@Overridepublic void cutPotato() {System.out.println("张厨师正在切土豆");}
}
//李厨师类
class CookLi implements Knife {@Overridepublic void cutApple() {System.out.println("李厨师正在切苹果");}@Overridepublic void cutTomato() {System.out.println("李厨师正在切番茄");}@Overridepublic void cutPotato() {System.out.println("李厨师正在切土豆");}
}/*假设有这样一个案例场景,现在有一个接口knife,给定他有三个能力,可以切苹果,切番茄,切土豆,两个类张
厨师,李厨师分别具有这些能力,有一个水果店类,假设是需要张师傅来切苹果和切番茄,而另一个蔬菜店类需要
李师傅来切番茄和切土豆*///水果店类
class FruitShop {// 将接口类型作为参数传入public void cutApple(Knife knife) {knife.cutApple();}public void cutTomato(Knife knife) {knife.cutTomato();}
}//蔬菜店类
class VegetableShop {public void cutTomato(Knife knife) {knife.cutTomato();}public void cutPotato(Knife knife) {knife.cutPotato();}
}
案例分析
1、VegetableShop使用到Knife中两个方法,同样FruitShop也是如此
2、CookZhang,CookLi分别实现Knife这个接口Knifes对于CookZhang,CookLi不是最小的接口,
换句话说CookZhang,CookLi就必须实现他们不需要的方法。导致这个类出现了耦合
这就违反了接口隔离原则(类间的依赖关系应该建立在最小的接口上)
解决方案
解决方案
根据接口隔离原则,我们将Knife拆分为三个独立的接口不就行了吗!
步骤:
- 将Knife拆分为AppleKnife,TomatoKinfe,PotatoKnife三个独立的接口
- CookZhang(张厨师类 )实现AppleKnife,TomatoKinfe
- CookLi(李厨师类)实现TomatoKinfe,PotatoKnife
- FruitShop(水果店类)cutApple方法和cutTomato方法分别传入AppleKnife和TomatoKinfe
- VegetableShop(蔬菜店类)cutTomato方法和cutPotato方法分别传入TomatoKinfe和PotatoKnife
public class SegregationDemo {public static void main(String[] args) {//水果店类new FruitShop().cutApple(new CookZhang());new FruitShop().cutTomato(new CookZhang());//蔬菜店类new VegetableShop().cutTomato(new CookLi());new VegetableShop().cutPotato(new CookLi());}
}//示例接口隔离原则
// 将接口knife拆分为三个独立的接口
interface AppleKnife {//切苹果的能力void cutApple();}
interface TomatoKinfe{//切番茄的能力void cutTomato();
}
interface PotatoKnife{//切土豆的能力void cutPotato();
}//张厨师类
class CookZhang implements AppleKnife,TomatoKinfe {@Overridepublic void cutApple() {System.out.println("张厨师正在切苹果");}@Overridepublic void cutTomato() {System.out.println("张厨师正在切番茄");}}//李厨师类
class CookLi implements TomatoKinfe,PotatoKnife {@Overridepublic void cutTomato() {System.out.println("李厨师正在切番茄");}@Overridepublic void cutPotato() {System.out.println("李厨师正在切土豆");}
}/*假设有这样一个案例场景,现在有一个接口knife,给定他有三个能力,可以切苹果,切番茄,切土豆,
两个类张厨师,李厨师分别具有这些能力,有一个水果店类,假设是需要张师傅来切苹果和切番茄,而另一个蔬菜店类需要
李师傅来切番茄和切土豆*/
//水果店类
class FruitShop {// 将接口类型作为参数传入public void cutApple(AppleKnife knife) {knife.cutApple();}public void cutTomato(TomatoKinfe knife) {knife.cutTomato();}
}//蔬菜店类
class VegetableShop {public void cutTomato(TomatoKinfe knife) {knife.cutTomato();}public void cutPotato(PotatoKnife knife) {knife.cutPotato();}
}
案例总结
接口隔离原则就是当我一个类通过接口依赖(使用)另一个类的时候,要保证依赖的该接口是最小的,
接口里面有方法用不到的,就进行隔离,而隔离的做法就是,就对原来接口进行拆分,拆分为最小粒度,来避免耦合
三 与单一职责原则对比
单一职责原则:合理的职责分解,一个类只负责一项职责
接口隔离原则:类间的依赖关系应该建立在最小的接口上
相同点
都要求对结构进行拆分,都要求更小的粒度,都希望减少耦合
不同点
审视角度的不同
单一职责原则:类与接口职责单一,注重的是职责
接口隔离原则:要求我们尽量使用多个专门的接口,注重的是接口的设计
我们使用接口隔离原则进行接口拆分的时候,要遵循单一职责原则
设计模式原则 - 接口隔离原则(二)相关推荐
- 设计模式系列(二)七大设计原则-----接口隔离原则
七大设计原则之单一接口隔离原则 接口隔离原则 案例 应用实例 改进 上一篇:设计模式系列(一)七大设计原则-----单一职责原则 下一篇:设计模式系列(三)七大设计原则-----依赖倒转原则 接口隔离 ...
- 【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )
文章目录 一.接口隔离原则简介 二.接口隔离原则代码示例 ( 反面示例 ) 1.接口定义 ( 接口臃肿 ) 2.实现类 1 3.实现类 2 三.接口隔离原则代码示例 ( 推荐用法 ) 1.接口 1 2 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- 六大设计原则-接口隔离原则
1.开闭原则 2.接口隔离原则 3.依赖倒置原则 4.迪米特原则 5.里氏替换原则 6.单一职责原则 接口隔离原则 客户端不应该依赖它不需要的接口:一个类 ...
- 深入浅出设计模式_深入浅出设计模式03接口隔离原则
本文作者:开课吧寂然 图文编辑:开三金 大家好~,我是寂然~,本节课呢,我来给大家介绍设计模式原则之接口隔离原则. 话不多说,我们直接进入正题,老规矩,首先带大家了解一下接口隔离原则的官方定义,并作一 ...
- 六大设计模式原则-接口隔离原则
一.接口隔离原则定义 接口隔离原则定义如下: 接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些 ...
- 设计模式7大原则——接口隔离原则解析(含代码示例)
一.定义 客户端不应该依赖它不需要的接口,即 一个类对另一个类的依赖应该建立在最小的接口 上 . 通俗的来说就是,不要在一个接口里面放很多的方法,这样会显得这个类很臃肿不堪.接口应该尽量细化,一个接口 ...
- 围观设计模式(4)--接口隔离原则(ISP,Interface Segregation Principle)
接口隔离原则(英语:interface-segregation principles, 缩写:ISP)指明没有客户(client)应该被迫依赖于它不使用方法.接口隔离原则(ISP)拆分非常庞大臃肿的接 ...
- 【设计模式】接口隔离原则
接口隔离原则 原则概述:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 如图中,[对象B]依赖[类D],[对象C]依赖[类E],但[类D]和[类E]都依赖于[接口A]. ...
最新文章
- Nacos下载与安装-windows
- mac终端下修改MySQL的编码格式以解决中文乱码问题--找不到my-default.cnf及my.cnf
- LeetCode:汇总区间【228】
- Hybrid框架UI重构之路:五、前端那点事儿(HTML、CSS)
- 【转】:andriod 开发环境工具下载地址(2)
- easyexcel导出百万级数据_百万级别数据Excel导出优化
- 黑马程序员___Java基础[04-继承和多态]
- 测试TF card 的读写速度
- Javascript闭包 ,JS中没有public,private等修饰词,里面的变量就分为globle和局部变量
- python编程考试题目大全
- 通用办公报表打印软件
- 数学建模模型2——多属性决策模型之加权算术平均算子【评价型】
- JavaScript和JQuery好书推荐
- win7系统下如何在虚拟机中安装Linux系统
- qq登录 适用于 laravel
- 应用跳转(打电话/短信/邮件/浏览器/其他应用)
- 《Visual C++ 2010入门教程》 旗舰级详尽教程
- 《乘风破浪的姐姐2》开播大热,姐姐们的.fans相关域名速来抢!
- 史上程序员被黑得最惨的一次?
- 自定义标签(TagSupport )