设计模式六大原则(五)接口隔离原则
设计模式六大原则
定义:简称ISP。客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
举例子:
给出指定食材(西红柿、黄瓜、芹菜),冷热菜师傅要根据自己的需求不同,对食材进行预处理。
先看不使用接口隔离原则,代码会什么样:
public class MadeFood {interface MadeFoodInter{void madeHot();void madeCold();}class Tomatoes implements MadeFoodInter{@Overridepublic void madeHot() {Log.w("打印","热菜->打鸡蛋->翻炒->西红柿炒鸡蛋");}@Overridepublic void madeCold() {Log.w("打印","冷菜->切片->加糖->搅拌->糖拌柿子");}}class Cucumber implements MadeFoodInter{@Overridepublic void madeHot() {Log.w("打印","热菜->切肉->翻炒->黄瓜炒肉");}@Overridepublic void madeCold() {Log.w("打印","冷菜->拍碎->加调料->搅拌->拍黄瓜");}}class Celery implements MadeFoodInter{@Overridepublic void madeHot() {Log.w("打印","热菜->切段->炒肉->加芹菜->芹菜炒肉");}@Overridepublic void madeCold() {Log.w("打印","冷菜->切段->焯水->加调料->凉拌芹菜");}}public MadeFoodInter getMade(String name){MadeFoodInter madeFoodInter = null;if(name.equals("西红柿")){madeFoodInter = new Tomatoes();}else if(name.equals("黄瓜")){madeFoodInter = new Cucumber();}else if(name.equals("芹菜")){madeFoodInter = new Celery();}return madeFoodInter;}
}
从上面的例子能看出来,把冷热菜需要的功能放到一个接口里之后,当热菜师傅调用接口之后,冷菜的制作方法也强制摆在热菜师傅面前,这显然是我们不应该设计出来的。
下面进行调整:
public class MadeFood {interface MadeHotInter{void madeHot();}interface MadeColdInter{void madeCold();}class Tomatoes implements MadeHotInter,MadeColdInter{@Overridepublic void madeHot() {Log.w("打印","热菜->打鸡蛋->翻炒->西红柿炒鸡蛋");}@Overridepublic void madeCold() {Log.w("打印","冷菜->切片->加糖->搅拌->糖拌柿子");}}class Cucumber implements MadeHotInter,MadeColdInter{@Overridepublic void madeHot() {Log.w("打印","热菜->切肉->翻炒->黄瓜炒肉");}@Overridepublic void madeCold() {Log.w("打印","冷菜->拍碎->加调料->搅拌->拍黄瓜");}}class Celery implements MadeHotInter,MadeColdInter{@Overridepublic void madeHot() {Log.w("打印","热菜->切段->炒肉->加芹菜->芹菜炒肉");}@Overridepublic void madeCold() {Log.w("打印","冷菜->切段->焯水->加调料->凉拌芹菜");}}public MadeHotInter getHote(String name){MadeHotInter madeFoodInter = null;if(name.equals("西红柿")){madeFoodInter = new Tomatoes();}else if(name.equals("黄瓜")){madeFoodInter = new Cucumber();}else if(name.equals("芹菜")){madeFoodInter = new Celery();}return madeFoodInter;}public MadeColdInter getColde(String name){MadeColdInter madeFoodInter = null;if(name.equals("西红柿")){madeFoodInter = new Tomatoes();}else if(name.equals("黄瓜")){madeFoodInter = new Cucumber();}else if(name.equals("芹菜")){madeFoodInter = new Celery();}return madeFoodInter;}
}
这里当然也可以对代码进行简化,但是这样更加直观。这样处理之后热菜师傅拿到的都是热菜的制作方法,冷菜师傅拿到的也只是冷菜的制作方法。调用此方法代码量不一定会减少,但逻辑会变清晰。
总之:接口隔离原则就是尽量让接口内的方法都是调用时必用的,原则上宁可接口多,也不要功能杂(当然也要根据开发实际情况)。
设计模式六大原则(五)接口隔离原则相关推荐
- 学习设计模式 - 六大基本原则之接口隔离原则
设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...
- [设计模式]设计模式之禅关于接口隔离原则
在讲接口隔离原则之前,先明确一下我们的主角--接口.接口分为两种: ● 实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生一个实例,它是对一个类型的事物的描述 ...
- 六大设计原则之接口隔离原则
接口隔离原则定义 接口隔离有两种定义: Clients should not be forced to depend upon interfaces that they don't use. 客户端不 ...
- 面向对象的六大原则之 接口隔离原则——ISP
ISP = Interface Segregation Principle ISP的定义如下: 1.客户端不应该依赖他不需要的接口 2.一个类对另外一个类的依赖性应该是建立在最小的接口上 3.不应当将 ...
- 单一职责原则和接口隔离原则区别的理解
网上对于两者的区别众说纷纭,总是一套理论下来跟没有说一样,下面说说自己的理解: 单一职责原则: 是将某一职责的方法全放在一个接口中,这时候就会出现实现该接口的类必须实现该接口中自己用不到的方法(违背 ...
- 软件设计原则之接口隔离原则、合成复用原则、迪米特原则
系列文章目录 软件设计原则之单一职责原则.开闭原则 软件设计原则之里氏替换原则.依赖倒置原则 软件设计原则之接口隔离原则.合成复用原则.迪米特原则 文章目录 系列文章目录 一.接口隔离原则 什么是接口 ...
- 面向对象编程原则(07)——接口隔离原则
版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 参考资料 <大话设计模式> 作者:程杰 <Java设计模式> 作者:刘 ...
- 七大设计原则之接口隔离原则应用
目录 1 接口隔离原则介绍 2 接口隔离原则应用 1 接口隔离原则介绍 接口隔离原则(Interface Segregation Principle, ISP)是指用多个专门的接口,而不使用单一的总接 ...
- 软件设计模式六大原则之四接口隔离原则(PHP语言实现)
转载,原文链接https://www.cnblogs.com/zhanghengscnc/p/8299459.html 定义:客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口 ...
- 深入浅出设计模式原则之接口隔离原则(ISP)
下面以学生成绩管理程序为例介绍接口隔离原则的应用(工程源码). 分析:学生成绩管理程序一般包含插入成绩.删除成绩.修改成绩.计算总分.计算均分.打印成绩信息.査询成绩信息等功能,如果将这些功能全部放到 ...
最新文章
- CSS如何正确显示人民币符号¥
- Anchor Boxes——目标检测质量的关键
- k8s监控之kube-state-metrics
- 笔记本右侧手滑板Synaptics
- QT的QQmlProperty类的使用
- python接收弹幕_闲着没事,尝试一下用Python爬取B站弹幕呀~
- https跳转到http session丢失问题
- ScrollView滑动控制
- Linux基础—3.Linux基础命令总结【有图有真相】
- 【转贴】谈谈企业经营管理中的八大黑洞
- pandas 日期比较大小_如何计算不同pandas列中两个日期之间的年数
- CAN应用层常用协议
- 自然语言处理入门 第一章 新手上路
- 无需ROOT安卓备份Soul应用数据并提取聊天记录
- R语言的graphics功能(画图)
- RSSI,RSRP,RSRQ and SINR
- 关于用例 前置条件等的理解(1)
- QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之01物联网模组简介
- 抽象语法树AST的全面解析(一)
- 数据库分区概念及简单运用
热门文章
- 「好软安利」一个使用简单还高效率的写作排版软件
- iPhone贴膜不求人!无气泡无灰尘完美贴膜自己来
- Unity3D-将美术提供的图片当做字体使用(普通图片自动生成Custom font)
- Linux命令之添加新用户useradd
- 价值流映射,在线流程图,在线绘图
- Android Studio 生成 aar包 及使用
- 第五人格pcmac_第五人格求生者人格天赋 人类人格天赋系统解析
- java核心技术影印版_Java核心技术 卷II:高级特性(第8版)(英文影印版)
- python爬虫快速入门
- 苏宁iphone俱乐部会员服务,葫芦里装的什么药?