1. 背景

类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类B和类D来说不是最小接口,则类B和类D不得不去实现它们不需要的方法。

2. 定义

一个类对另一个类的依赖应该建立在最小的接口上,不应该依赖他不需要的接口。

3. 解决方案

将臃肿的接口I拆分为独立的几个接口,类A和类C分别于它们需要的接口建立依赖关系,即接口隔离原则。

4. 模拟场景

接口I中有5个方法, 类A通过接口I依赖于类B,但类A只需要方法1、方法2、方法3;类C通过接口I依赖于类D,但类C只需要方法1、方法4、方法5。

以上这种业务场景:我们发现,对类B来说,方法4和方法5不是必须的,但不得不实现;对于类D来说,方法2和方法3不是必须的,但不得不实现,显然不满足接口隔离原则。

解决方案:将接口I拆分成三个接口 I1、I2、I3;I1中有方法1;I2中有方法2、方法3;I3中有方法4、方法5。B实现接口I1和I2,D实现接口I1和I3;这样就满足最小接口依赖了,即满足接口隔离原则了

  注意:为了和上面的代码区分:A用AA表示,B用BB表示,一次类推

  public interface I1
{
void methord1();
}
  public interface I2
{
void methord2();
void methord3();
}
   public interface I3
{
void methord4();
void methord5();
}
  public class BB : I1, I2
{
public void methord1()
{
Console.WriteLine("类BB实现接口I1的方法1");
} public void methord2()
{
Console.WriteLine("类BB实现接口I2的方法2");
} public void methord3()
{
Console.WriteLine("类BB实现接口I2的方法3");
}
}
  public class DD:I1,I3
{
public void methord1()
{
Console.WriteLine("类DD实现接口I1的方法1");
} public void methord4()
{
Console.WriteLine("类DD实现接口I3的方法4");
} public void methord5()
{
Console.WriteLine("类DD实现接口I3的方法5");
}
}
  public class AA
{
public void Depend1(I1 i)
{
i.methord1();
}
public void Depend2(I2 i)
{
i.methord2();
}
public void Depend3(I2 i)
{
i.methord3();
}
}
  public  class CC
{
public void Depend1(I1 i)
{
i.methord1();
}
public void Depend4(I3 i)
{
i.methord4();
}
public void Depend5(I3 i)
{
i.methord5();
}
}
  public static void show2()
{ //解决上述业务场景,使其满足接口隔离原则
//解决方案:将接口I拆分成三个接口 I1、I2、I3;I1中有方法1;I2中有方法2、方法3;I3中有方法4、方法5。B实现接口I1和I2,D实现接口I1和I3;这样就满足最小接口依赖了,
//即满足接口隔离原则了
//注意:为了和上面的代码区分:A用AA表示,B用BB表示,一次类推
AA aa = new AA();
aa.Depend1(new BB());
aa.Depend2(new BB());
aa.Depend3(new BB());
CC cc = new CC();
cc.Depend1(new DD());
cc.Depend4(new DD());
cc.Depend5(new DD()); }

04-接口隔离原则(ISP)的更多相关文章

  1. C#软件设计——小话设计模式原则之:接口隔离原则ISP

    前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...

  2. 深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle). 英文原文:htt ...

  3. 设计原则:接口隔离原则(ISP)

    接口隔离原则的英文是Interface Segregation Principle,缩写就是ISP.与里氏替换原则一样其定义同样有两种 定义1: Clients should not be force ...

  4. 【面向对象设计原则】之接口隔离原则(ISP)

    接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口. 从接口隔离原则的定义可以看 ...

  5. 接口隔离原则(ISP)

    设计应用程序的时候,如果一个模块包含多个子模块,那么我们应该小心对模块做出抽象.设想该模块由一个类实现,我们可以把系统抽象成一个接口.但是要添加一个新的模块扩展程序时,如果要添加的模块只包含原系统中的 ...

  6. 面向对象的六大原则之 接口隔离原则——ISP

    ISP = Interface Segregation Principle   ISP的定义如下: 1.客户端不应该依赖他不需要的接口 2.一个类对另外一个类的依赖性应该是建立在最小的接口上 3.不应 ...

  7. IOS设计模式的六大设计原则之接口隔离原则(ISP,Interface Segregation Principle)

    定义 客户端不应该依赖它不需要的接口: 一个类对另一个类的依赖应该建立在最小的接口上. 定义解读 定义包含三层含义: 一个类对另一个类的依赖应该建立在最小的接口上: 一个接口代表一个角色,不应该将不同 ...

  8. 设计模式学习--面向对象的5条设计原则之接口隔离原则--ISP

    一.ISP简介(ISP--Interface Segregation Principle): 使用多个专门的接口比使用单一的总接口要好.一个类对另外一个类的依赖性应当是建立在最小的接口上的.一个接口代 ...

  9. 设计模式六大原则(四):接口隔离原则(Interface Segregation Principle)

    接口隔离原则(ISP)定义: 客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口上. 问题由来: 类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不 ...

  10. 设计模式之六大原则——接口隔离原则(ISP)

    设计模式之六大原则——接口隔离原则(ISP)  转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html 接口隔离原则 ...

随机推荐

  1. 批处理-For详解

    大纲 一 前言 二 for语句的基本用法 三 for /f (delims.tokens.skip.eol.userbackq.变量延迟) 四 for /r (递归遍历) 五 for /d (遍历目录 ...

  2. laravel 多个项目共享SESSION

    只讨论一个域下的项目. eg: a.xxx.com 和 b.xxx.com 来共享session 如果多个laravel项目共享SESSION要满足以下条件: SESSION可以存放在一个地方,eg: ...

  3. logstash 使用kafka范例

    写入到kafka input { stdin { } } output { kafka { bootstrap_servers => "10.0.0.200:9092" to ...

  4. loadrunner基础学习笔记八-分析场景

    analysis会话的目的是查找系统的性能问题,然后找出这些问题的根源 如: 是否达到了预期的测试目标,在负载下对用户终端的事务响应时间是多少 是否符合sla还是偏离了目标 事务的平均响应时间是多少 ...

  5. A Plug for UNIX POJ - 1087(模板题 没啥好说的。。就用了一个map)

    题意: 几种插头,每一种都只有一个,但有无限个插头转换器,转换器(a,b) 意味着 可以把b转换为a,有几个设备,每个设备对应一种插头,求所不能匹配插头的设备数量 这个题可以用二分图做 , 我用的是最 ...

  6. 【Gym 100733D】Little thief Shi(取数,DP)

    题 Shi realized that he was almost out of money, even renting Shitalian lands. Shi was walking on a s ...

  7. 洛谷P2257 YY的GCD

    今日份是数论 大概是..从小学奥数到渐渐毒瘤 那就简单列一下目录[大雾 同余 质数密度 唯一分解定理 互质 完全剩余系 简化剩余系 欧拉函数 逆元 斐蜀定理 阶(及其性质) 欧拉定理 费马小定理 原根 ...

  8. Nginx反代至Tomcat基于memcached的session保持

    实现功能:基于前面tomcat基础简介与示例文章 (1) tomcat cluster将会话保存至memcached中:实现模型: 这里写图片描述 配置B,C主机安装openjdk与tomcat[本次 ...

  9. Java中线程池的实现原理-求职必备

    jdk1.5引入Executor线程池框架,通过它把任务的提交和执行进行解耦,只需要定义好任务,然后提交给线程池,而不用关心该任务是如何执行.被哪个线程执行,以及什么时候执行. 初始化线程池(4种) ...

  10. ASP: Response 对象 错误 'ASP 0251 : 80004005' 解决办法

    Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 这种情况一般是因为需要输出的网页内容太大了,由于asp在输入内容到客户的浏览器上之前,会把需要输出的全部内 ...