设计模式7大原则——接口隔离原则解析(含代码示例)
一、定义
客户端不应该依赖它不需要的接口,即 一个类对另一个类的依赖应该建立在最小的接口 上 。
通俗的来说就是,不要在一个接口里面放很多的方法,这样会显得这个类很臃肿不堪。接口应该尽量细化,一个接口对应一个功能模块,同时接口里面的方法应该尽可能的少,使接口更加轻便灵活。
注意点:
大家不要把接口隔离原则和单一职责原则相弄混。接口隔离原则和单一职责原则的审视角度是不同的,单一职责原则要求类和接口职责单一,注重的是职责,是业务逻辑上的划分,而接口隔离原则要求方法要尽可能的少,是在接口设计上的考虑。
二、案例解析
还是用我们之前说过的娱乐圈举例吧,假设现在有星探1和星探2要找美女明星。他们的评判标准不太一样,星探1觉得:身材好、面容姣好就是美女,星探2觉得气质好的女生就是美女。
下面我们开始写代码
我们定义美女接口,代码如下:
//美女接口
public interface IPettyGirl {//要有姣好的面孔public void goodLooking();//要有好身材public void niceFigure();//要有气质public void greatTemperament();
}//接口的实现类
public class PettyGirl implements IPettyGirl {private String name;public PettyGirl(String name){ this.name= name;}//脸蛋漂亮
public void goodLooking() {System.out.println(this.name + "---脸蛋很漂亮!");
}//气质要好
public void greatTemperament() {System.out.println(this.name + "---气质非常好!");
}//身材要好
public void niceFigure() {System.out.println(this.name + "---身材非常棒!");}
}
下面我们写出两个星探代码。
//星探的抽象
public abstract class AbstractSearcher {protected IPettyGirl pettyGirl;public AbstractSearcher(IPettyGirl pettyGirl){this.pettyGirl = pettyGirl;}//搜索美女, 列出美女信息public abstract void show();
}//星探1实现类,他以为身材好、面容姣好就是美女
public class Searcher1 extends AbstractSearcher{public Searcher(IPettyGirl pettyGirl){super(pettyGirl);}//展示美女的信息public void show(){System.out.println("--------美女的信息如下:---------------");//展示面容super.pettyGirl.goodLooking();//展示身材super.pettyGirl.niceFigure();}
}//星探1实现类,他以为气质好就是美女
public class Searcher2 extends AbstractSearcher{public Searcher(IPettyGirl pettyGirl){super(pettyGirl);}//展示美女的信息public void show(){System.out.println("--------美女的信息如下:---------------");//展示气质super.pettyGirl.greatTemperament();}
}//下面是客户端代码
public class Client {//搜索并展示美女信息public static void main(String[] args) {//定义一个美女IPettyGirl xiaoMei = new PettyGirl("小美");AbstractSearcher searcher1 = new Searcher1(yanYan);searcher1.show();AbstractSearcher searcher2 = new Searcher2yanYan);searcher2.show();}
}
写完后,感觉还不错,但是这么设计不是最优代码。IPrettyGirl接口中包含了太多的功能,按照这个接口设计,所有的女人都要实现这三个方法,那所有女人岂不是都是美女?而且Searcher1和Search2二个类也仅仅使用了接口中的部分功能,这就违背了接口隔离原则。下面我们对这个接口拆分一下,代码如下:
public interface IGoodBodyGirl {//要有姣好的面孔public void goodLooking();//要有好身材public void niceFigure();
}public interface IGreatTemperamentGirl {//要有气质public void greatTemperament();
}
//女孩1:身材,面容,气质都很好
public class PettyGirl1 implements IGoodBodyGirl,IGreatTemperamentGirl {...中间实现方法略...
}//女孩2:身材,面容很好
public class PettyGirl2 implements IGoodBodyGirl {...中间实现方法略...
}
这样设计是不是就灵活多了呢?经过重新设计,程序变得更加灵活,这就是接口隔离原则的强大之处。
PS:注意接口隔离原则的辩证关系
接口设计的粒度越小,系统越灵活,这是不争的事实,但是灵活的同时也带来了结构的复杂化,开发难度的增加,可维护性降低。所以这个度要进行权衡。
好了,就先分享到这里,关注我,java学习不头秃,还为每位粉丝准备了一份全面的资料福利,从面试简历模板到大厂面经汇总,从大厂内部技术资料到互联网高薪必读书单,以及Java面试核心知识点(283页)和Java面试题合集2022年最新版(485页)等等,有需要的可以点下方名片领取
设计模式7大原则——接口隔离原则解析(含代码示例)相关推荐
- 【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )
文章目录 一.接口隔离原则简介 二.接口隔离原则代码示例 ( 反面示例 ) 1.接口定义 ( 接口臃肿 ) 2.实现类 1 3.实现类 2 三.接口隔离原则代码示例 ( 推荐用法 ) 1.接口 1 2 ...
- 设计模式系列(二)七大设计原则-----接口隔离原则
七大设计原则之单一接口隔离原则 接口隔离原则 案例 应用实例 改进 上一篇:设计模式系列(一)七大设计原则-----单一职责原则 下一篇:设计模式系列(三)七大设计原则-----依赖倒转原则 接口隔离 ...
- 六大设计原则-接口隔离原则
1.开闭原则 2.接口隔离原则 3.依赖倒置原则 4.迪米特原则 5.里氏替换原则 6.单一职责原则 接口隔离原则 客户端不应该依赖它不需要的接口:一个类 ...
- [设计模式]设计模式之禅关于接口隔离原则
在讲接口隔离原则之前,先明确一下我们的主角--接口.接口分为两种: ● 实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生一个实例,它是对一个类型的事物的描述 ...
- 设计模式之禅之接口隔离原则
声明:本文为阅读秦小波所写的<设计模式之禅>所写小结,文章内容可能有部分引述此书. 接口隔离原则(Interface Segregation Principle):每个模块接口独立 1.定 ...
- 学习设计模式 - 六大基本原则之接口隔离原则
设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...
- 六大设计模式原则-接口隔离原则
一.接口隔离原则定义 接口隔离原则定义如下: 接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些 ...
- java设计模式之设计原则④接口隔离原则
定义: (1)用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口. (2)一个类对一个类的依赖应该建立在最小的接口上. (3)建立单一接口,不要建立庞大臃肿的接口. (4)尽量细化 ...
- 设计模式原则 - 接口隔离原则(二)
接口隔离原则 一 官方定义 二 案例演示 普通方案 案例分析 解决方案 解决方案 案例总结 三 与单一职责原则对比 一 官方定义 接口隔离原则(Interface Segregation Princi ...
最新文章
- Non-ASCII character '\xe6'
- 半监督训练-思想与代码实践
- 第三次学JAVA再学不好就吃翔(part67)--Math类
- 安装JDK-- Java基础
- Java 中的目录创建处理
- 关于Docker官方CentOS镜像无法启动mysqld的总结
- python调用java文件_Python程序中调用Java代码的实践
- zabbix的trigger
- java web filter 入口_springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径
- 在一个环境中使用不同版本的rails
- pg 简单备份和恢复
- 下载站mime属性设置(让文件可下载)
- 什么是JavaSE,写给第一次接触Java的人
- 卷积神经网络原理与实现过程
- 计算机专业如何高质量的走完大学四年?毕业成为Offer收割机
- 教你用前端制作fashion充电水滴融合特效
- 怎么去搭建聚合支付系统比较划算
- 工程伦理--4.2 划界法
- 深度学习中,偏置(bias)在什么情况可以不要?
- flickr的奇怪的认证过程