接口隔离原则:

接口分两种:

实例接口:Java中的类

类接口:interface定义的接口

原则的两种定义:

1.client不应该依赖它不须要的接口

2.类间的依赖关系应该建立在最小的接口上

须要对接口进行细化。保持清纯性。

接口尽量细化,同一时候接口中的方法尽量少,增强专门性。

接口隔离原则是对接口进行规范约束,包括4层含义:

1.接口要尽量小

这是原则的核心定义。可是小也是有限度的,不能违反单一 职责原则。

2.接口要高内聚

什么是高内聚?就是提高类、接口的处理能力。降低对外的交互。

类提供一个方法。你仅仅须要知道调用这种方法就能够实现一系列的功能,可是详细是如何实现的就不知道了。详细到接口隔离原则就是在接口中尽量少的发布public方法。

3.定制服务

单独为当中的某一模块抽象成一个接口。

4.接口的设计是有限的

需求总是在变化的。

用书中的样例“星探寻找美女”来进一步理解上述四个含义。

首先得有一个美女的接口和星探的抽象接口:

interface IPrettyGirl {// 长得好看public void goodLooking();// 身材好public void niceFigure();// 有气质public void greatTemperament();
}abstract class AbstractSearcher {protected IPrettyGirl prettyGirl;public AbstractSearcher(IPrettyGirl prettyGirl) {this.prettyGirl = prettyGirl;}public abstract void show();
}

实现美女类和星探类:

class PrettyGirl implements IPrettyGirl {private String name;public PrettyGirl(String name) {this.name = name;}@Overridepublic void goodLooking() {System.out.println(name + "--->脸蛋非常美丽");}@Overridepublic void niceFigure() {System.out.println(name + "--->身材非常好");}@Overridepublic void greatTemperament() {System.out.println(name + "--->气质好");}}class Searcher extends AbstractSearcher {public Searcher(IPrettyGirl prettyGirl) {super(prettyGirl);}@Overridepublic void show() {System.out.println("-----美女信息例如以下-----");// 展示面容super.prettyGirl.goodLooking();// 展示身材super.prettyGirl.niceFigure();// 展示气质super.prettyGirl.greatTemperament();}}

场景类:

public class Client {public static void main(String[] args) {IPrettyGirl girl = new PrettyGirl("圆圆");AbstractSearcher searcher = new Searcher(girl);searcher.show();}
}

可是美女并不一定都是满足长得美丽、身材好、有气质这三个条件。仅仅满足当中一个也能够算是一个“美女”。仅仅只是不是那么完美罢了。比方说。背影杀手。

那么详细到这个程序我们应该怎么去实现呢?PrettyGirl实现IPrettyGirl接口里的所有方法,所以仅仅能对IPrettyGirl接口进行拆分、细化。拆分成两个或几个接口。这个视需求而定。

如果我们将美女分为气质型美女和外形美的美女,这样就是两个接口。外形美女也能够分成 (脸)长得美丽的美女和身材好的美女。这样就是拆分成三个接口。各自是:IGoodLookingGirl、INiceFigureGirl、IGreatTemperamentGirl。

美女的接口及实现类:

interface IGoodLookingGirl {public void goodLooking();
}interface INiceFigureGirl {public void niceFigure();
}interface IGreatTemperamentGirl {public void greatTemperament();
}// 长得好看的美女
class GoodLookingGirl implements IGoodLookingGirl {private String name;public GoodLookingGirl(String name) {this.name = name;}@Overridepublic void goodLooking() {System.out.println(name + "--->脸蛋非常美丽");}
}// 身材好的美女
class NiceFigureGirl implements INiceFigureGirl {private String name;public NiceFigureGirl(String name) {this.name = name;}@Overridepublic void niceFigure() {System.out.println(name + "--->身材好");}}// 有气质的美女
class GreatTemperamentGirl implements IGreatTemperamentGirl {private String name;public GreatTemperamentGirl(String name) {this.name = name;}@Overridepublic void greatTemperament() {System.out.println(name + "--->有气质");}}// 完美
class PrettyGirl implements IGoodLookingGirl, INiceFigureGirl,IGreatTemperamentGirl {private String name;public PrettyGirl(String name) {this.name = name;}@Overridepublic void greatTemperament() {System.out.println(name + "--->有气质");}@Overridepublic void niceFigure() {System.out.println(name + "--->身材好");}@Overridepublic void goodLooking() {System.out.println(name + "--->脸蛋非常美丽");}}

星探的接口及实现类:

abstract class AbstractSearcher {protected PrettyGirl prettyGirl;protected GoodLookingGirl goodLookingGirl;protected GreatTemperamentGirl greatTemperamentGirl;protected NiceFigureGirl niceFigureGirl;public AbstractSearcher(PrettyGirl prettyGirl) {this.prettyGirl = prettyGirl;}public AbstractSearcher(IGoodLookingGirl goodLookingGirl) {this.goodLookingGirl = (GoodLookingGirl) goodLookingGirl;}public AbstractSearcher(IGreatTemperamentGirl greatTemperamentGirl) {this.greatTemperamentGirl = (GreatTemperamentGirl) greatTemperamentGirl;}public AbstractSearcher(INiceFigureGirl niceFigureGirl) {this.niceFigureGirl = (NiceFigureGirl) niceFigureGirl;}public abstract void showPrettyGirl();public abstract void showGoodLookingGirl();public abstract void showNiceFigureGirl();public abstract void showGreatTemperamentGirl();
}class Searcher extends AbstractSearcher {public Searcher(IGoodLookingGirl goodLookingGirl) {super(goodLookingGirl);}public Searcher(INiceFigureGirl niceFigureGirl) {super(niceFigureGirl);}public Searcher(IGreatTemperamentGirl temperamentGirl) {super(temperamentGirl);}public Searcher(PrettyGirl prettyGirl) {super(prettyGirl);}@Overridepublic void showPrettyGirl() {super.prettyGirl.goodLooking();super.prettyGirl.niceFigure();super.prettyGirl.greatTemperament();}@Overridepublic void showGoodLookingGirl() {super.goodLookingGirl.goodLooking();}@Overridepublic void showNiceFigureGirl() {super.niceFigureGirl.niceFigure();}@Overridepublic void showGreatTemperamentGirl() {super.greatTemperamentGirl.greatTemperament();}}

场景类:

public class Client {public static void main(String[] args) {IGoodLookingGirl goodLookingGirl = new GoodLookingGirl("冰冰");INiceFigureGirl niceFigureGirl = new NiceFigureGirl("圆圆");IGreatTemperamentGirl greatTemperamentGirl = new GreatTemperamentGirl("芳芳");PrettyGirl prettyGirl = new PrettyGirl("张三");AbstractSearcher goodlookingGirlsearcher = new Searcher(goodLookingGirl);AbstractSearcher niceFigureGirlSearcher = new Searcher(niceFigureGirl);AbstractSearcher greatTemperamentGirlSearcher = new Searcher(greatTemperamentGirl);AbstractSearcher prettyGirlSearcher = new Searcher(prettyGirl);goodlookingGirlsearcher.showGoodLookingGirl();niceFigureGirlSearcher.showNiceFigureGirl();greatTemperamentGirlSearcher.showGreatTemperamentGirl();prettyGirlSearcher.showPrettyGirl();}
}

执行结果:

冰冰--->脸蛋非常美丽
圆圆--->身材好
芳芳--->有气质
张三--->脸蛋非常美丽
张三--->身材好
张三--->有气质

写完之后本人就懵了,事实上写的过程中就已经懵了,越写越认为理解的有问题。怎么会这么麻烦。

。。

转载于:https://www.cnblogs.com/mfrbuaa/p/5367209.html

6大设计模式(4):接口隔离原则相关推荐

  1. 深入浅出设计模式_深入浅出设计模式03接口隔离原则

    本文作者:开课吧寂然 图文编辑:开三金 大家好~,我是寂然~,本节课呢,我来给大家介绍设计模式原则之接口隔离原则. 话不多说,我们直接进入正题,老规矩,首先带大家了解一下接口隔离原则的官方定义,并作一 ...

  2. 嘻哈说:设计模式之接口隔离原则

    1.定义 按照惯例,首先我们来看一下接口隔离原则的定义. 类间的依赖关系应该建立在最小的接口上. 接口中的方法应该尽量少,不要使接口过于臃肿,不要有很多不相关的逻辑方法. 有点类似于单一职责原则,都是 ...

  3. 围观设计模式(4)--接口隔离原则(ISP,Interface Segregation Principle)

    接口隔离原则(英语:interface-segregation principles, 缩写:ISP)指明没有客户(client)应该被迫依赖于它不使用方法.接口隔离原则(ISP)拆分非常庞大臃肿的接 ...

  4. 【设计模式】接口隔离原则

    接口隔离原则 原则概述:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 如图中,[对象B]依赖[类D],[对象C]依赖[类E],但[类D]和[类E]都依赖于[接口A]. ...

  5. 设计模式:接口隔离原则

    定义 接口隔离原则(Interface Segregation Principle, ISP),定义为: Clients should not be forced to depend upon int ...

  6. 设计模式之接口隔离原则

    接口隔离原则定义: 一个类对另一个类的依赖应该建立在最小的接口上,使得接口中的方法得到充分利用. uml图: 相关代码1: /*接口没有得到充分的利用,所以他违反了接口隔离原则. */public c ...

  7. 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)

    设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...

  8. 设计模式 — 6大设计原则(依赖倒置和接口隔离原则)

    设计模式 依赖倒置原则 示例 一 示例 二 依赖的三种写法 总结 接口隔离原则 实例 一 总结 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)这个名 ...

  9. Java设计模式之设计的6大原则(开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,最少知道原则,合成复用原则)

    1. 开闭原则 核心思想:一个对象对外扩展开发,对修改关闭 意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码. 也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证 ...

最新文章

  1. python codecs.open()及文件操作-文本处理 with open
  2. 做技术的,年龄大了你慌吗?
  3. C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod(Add);
  4. 【转】Thunderbird中配置签名
  5. LeetCode 898. 子数组按位或操作(前缀和思想)
  6. 分享 2 个“捷径”,帮你 6 个月达到阿里 P7 水平
  7. 前端面试知识点(所谓的面试题)(备份前端网)
  8. CISCO认证涨价了
  9. by mybatis 自定义order_MyBatis动态SQL实现ORDER BY和LIMIT的控制?
  10. [PTA]实验7-2-5 判断上三角矩阵
  11. matlab流体力学分析,matlab流体力学
  12. 阿里云P10技术专家褚霸:我是一个程序员
  13. 合成孔径雷达影像(SAR图像)变化检测深度学习研究方法
  14. PyCharm输入法无法切换中英文
  15. max232c语言,串行口通信(STC89C52+MAX232):串行口通信硬件设计详解
  16. 用excel做一个家庭流水账本 增加一些统计功能 和大家分享
  17. 阿里巴巴年薪800k大数据全栈工程师成长记
  18. Kubernetes详解(四十一)——Secret创建
  19. vue之var和let声明变量
  20. java实现一个整数分解为两个质数乘积

热门文章

  1. Codeforces 85D Sum of Medians
  2. Tomcat的安装及使用
  3. 2018-08-01-weekly
  4. leetcode 367. Valid Perfect Square
  5. 宅男程序员给老婆的计算机课程之8:控制器
  6. xhost: unable to open display linux下安装oracle
  7. 光伏业务爆发 同景新能源与信义光能签署103MW订单
  8. node.js学习笔记(4) http服务
  9. 短信怎么控制modbus设备?
  10. 批量插入使用SqlBulkCopy