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. laravel orm 中的一对多关系 hasMany

    个人对于laravel orm 中对于一对多关系的理解 文章表 article,文章自然可以评论,表 comment 记录文章的评论,文章和评论的关系就是一对多,一篇文章可以有多个评论. 在 comm ...

  2. JIRA & GitHub

    JIRA & GitHub https://confluence.atlassian.com/adminjiracloud/connect-jira-cloud-to-github-81418 ...

  3. caffe训练resume

    MODEL=${EXP}/model/${NET_ID}/pspnet101_VOC2012.caffemodel SNAPSHOT=${EXP}/model/${NET_ID}/train_iter ...

  4. BZOJ3545&3551[ONTAK2010]Peaks——kruskal重构树+主席树+dfs序+树上倍增

    题目描述 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只 ...

  5. Hibernate 查询技术

    转载: http://blog.csdn.net/u014078192/article/details/24986475 一.Hibernate的三种查询方式(掌握) Hibernate中提供了三种查 ...

  6. MT【7】伯努利不等式

    评:伯努利不等式: 若$r\le0$或者$r\ge1$,$(1+x)^r\ge1+rx$, 若$0\le r\le1$,$(1+x)^r\le1+rx$

  7. Fail2ban 配置

    本例为wordpress管理员登陆限制安装rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.n ...

  8. Leetcode 20.有效的括号 By Python

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  9. BZOJ 4499: 线性函数

    4499: 线性函数 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 177  Solved: 127[Submit][Status][Discuss] ...

  10. 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记

    一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...