`

Java 设计模式 - 接口隔离原则

 
阅读更多

接口隔离原则要求的是在一个模块应该只依赖它需要的接口,以保证接口的小纯洁。而且需要保证接口应该尽量小,即设计接口的时候应该让接口尽量细化,不要定义太臃肿的接口(比如接口中有很多不相干的逻辑的方法声明)。

首先看看接口隔离原则的定义,有两种定义

第一种:Clients should not be forced to depend upon interfaces that they don't use.(客户端不应该强行以来它不需要的接口)

第二种:The dependency of one class to another one should depend on the smallest possible interface.(类间的依赖关系应该建立在最小的接口上)

而这里的接口,却不仅仅指的是通过interface关键字定义的接口,接口分为2种:

1、对象接口(Object Interface)

JAVA中声明的一个类,通过new关键字产生的一个实例,它是对一个类型的事物的描述,这也是一种接口。例如:

Phone phone = new Phone();这里的类Person就是实例phone的一个接口

2、类接口(Class Interface)

这种接口就是通过interface关键字定义的接口了

 

也就是说,接口隔离原则要求的是在一个模块应该只依赖它需要的接口,以保证接口的小纯洁。而且需要保证接口应该尽量小,即设计接口的时候应该让接口尽量细化,不要定义太臃肿的接口(比如接口中有很多不相干的逻辑的方法声明)。

接口隔离原则与单一职责原则有些相似,不过不同在于:单一职责原则要求的是类和接口职责单一,注重的是职责,是业务逻辑上的划分。而接口隔离原则要求的是接口的方法尽量少,尽量有用(针对一个模块)

在使用接口隔离原则的时候需要有一些规范:

1.接口尽量小

接口尽量小主要是为了保证一个接口只服务一个子模块或者业务逻辑

2.接口高内聚

接口高内聚是对内高度依赖,对外尽可能隔离。即一个接口内部的声明的方法相互之间都与某一个子模块相关,且是这个子模块必须的。

3.接口设计是有限度的

但是如果完全遵循接口隔离原则的话,会出现一个问题。即接口的设计力度会越来越小,这样就造成了接口数量剧增,系统复杂度一下子增加了,而这不是真实项目所需要的,所以在使用这个原则的时候还要在特定的项目,根据经验或者尝试判断,不过没有一个固定的标准。

举个例子

在春熙路上逛街,到处都是女的,有穿着丝袜的大妈(恶心一下),有文静的女生,有性感的辣妹,总之很多女的。然而当你对前面喊一声“美女,钱掉了”,估计前面连同大妈一起回头看看,以为在叫自己。如今美女这个词已经变得大众化了,反正跟女的打招呼就说美女。但是真正的美女是这样吗,男淫们心中的美女应该是这样的:身材好、长相好、气质佳。

IPrettyGirl.java:定义美女标准

  1. //定义美女接口  
  2. public interface IPrettyGirl {  
  3.     //长相好  
  4.     public void greatLooks();  
  5.     //好身材  
  6.     public void greatFigure();  
  7.     //气质佳  
  8.     public void greatTemperament();  

PrettyGril.java:实现美女类

  1. public class PrettyGirl implements IPrettyGirl {  
  2.     private String name;  
  3.     //构造函数,美女名字  
  4.     public PrettyGirl(String name)  
  5.     {  
  6.         this.name = name;  
  7.     }  
  8.     //好身材  
  9.     @Override 
  10.     public void greatFigure() {  
  11.         System.out.println(name+":身材非常好");  
  12.     }  
  13.     //好长相  
  14.     @Override 
  15.     public void greatLooks() {  
  16.         System.out.println(name+":长相非常好");  
  17.     }  
  18.     //好气质  
  19.     @Override 
  20.     public void greatTemperament() {  
  21.         System.out.println(name+":气质非常好");  
  22.     }  
  23.    

AMan:是个抽象类,抽象出一个男人来

  1. public abstract class AMan {  
  2.     protected IPrettyGirl prettyGirl;  
  3.     public AMan(IPrettyGirl prettyGirl)  
  4.     {  
  5.         this.prettyGirl = prettyGirl;  
  6.     }  
  7.        
  8.     //帅哥开始找美女啦  
  9.     public abstract void findGirl();  

Man:

  1. public class Man extends AMan {  
  2.    
  3.     public Man(IPrettyGirl prettyGirl) {  
  4.         super(prettyGirl);  
  5.     }  
  6.    
  7.     @Override 
  8.     public void findGirl() {  
  9.         System.out.println("美女在这里:----------------------");  
  10.         super.prettyGirl.greatLooks();  
  11.         super.prettyGirl.greatFigure();  
  12.         super.prettyGirl.greatTemperament();  
  13.            
  14.     }  
  15.    

场景类,春熙路,帅哥开始寻找美女了

  1. public class ChunxiRoad {  
  2.     public static void main(String args[])  
  3.     {  
  4.         IPrettyGirl jiajia = new PrettyGirl("佳佳");  
  5.         AMan man = new Man(jiajia);  
  6.         man.findGirl();  
  7.     }  

运行结果:

美女在这里:---------------------- 
佳佳:长相非常好
佳佳:身材非常好
佳佳:气质非常好

但是这里有个问题,接口划分的不是很清晰,比如有些男人认为某些女生长相好,身材好就是美女(而不管这个女的素质啥样,比如那些“压脉带”)。而某些女生虽然长相一般,身材也一般,但是气质很好,这就是某些宅男心目中的气质型美女,或者三者具备。所以需要把接口划分的再细一点以满足不同男人的审美观。

我们把接口分为两种:

好身材

  1. public interface IGreatBody {  
  2.     //好长相  
  3.     public void greatLooks();  
  4.     //身材  
  5.     public void greatFigure();  

好气质

  1. public interface IGreatTemperament {  
  2.     //气质好  
  3.     public void greatTemperament();  

然后我们就可以根据自己的需求来寻找自己心目中认为的美女啦,举个例子

上面的AMan和Man传递的接口变为IGreatBody

接下来,我们来到了--东京。看到了cang老师

  1. public class Tokyo {  
  2.     public static void main(String args[])  
  3.     {  
  4.         IGreatBody canglaoshi = new PrettyGirl("cang老师");  
  5.         AMan man = new Man(canglaoshi);  
  6.         man.findGirl();  
  7.     }  
  8. 运行结果:

    美女在这里:---------------------- 
    cang老师:长相非常好 
    cang老师:身材非常好 

    原文链接:http://www.cnblogs.com/loulijun/archive/2012/03/07/2382247.html

分享到:
评论

相关推荐

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    JAVA设计模式-原则和23种设计模式归纳总结

    本资源首先介绍了设计模式的六大原则,包括单一责任原则、开闭原则、里氏替换原则、接口隔离原则、合成复用原则和最少知道原则。然后,资源对23种设计模式进行了分类和总结,包括创建型模式、结构型模式和行为型模式...

    JAVA设计模式-设计模式公司出品

    4. 接口隔离原则:不应该强迫客户依赖于它们不用的方法。接口应该小而完备。 5. 迪米特法则(最少知识原则):只与你的密友“交谈”。 6. 开闭原则:软件实体应对扩展开放,对修改关闭。 这本书不仅讲解了具体的...

    Java设计模式-图解-附代码.doc

    它们帮助开发者遵循面向对象设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则,从而提高代码的可读性、可维护性和可复用性。 在实际编程中,理解并熟练应用设计模式可以使代码更加...

    Java设计模式-23种设计模式详解

    5. 接口隔离原则(Interface Segregation Principle):客户端不应该依赖它不需要的接口。类间的依赖关系应该建立在最小的接口上。 6. 迪米特法则(最少知道原则)(Law of Demeter):只与你的直接朋友交谈,不跟...

    JAVA设计模式之设计原则 ---开闭原则源码

    开闭原则是面向对象设计中的一个核心原则,它在JAVA设计模式中占据着重要的地位。这一原则由格里·贝斯提出,旨在指导开发者如何设计可维护和可扩展的软件系统。开闭原则(Open-Closed Principle,OCP)的核心思想是...

    Java设计模式-面向对象七大设计原则

    例如:随着计算机的不断发展,程序学习这门技术也越来越重要,很多人都开启了...面向对象设计原则一共有七个:开闭原则、里氏替换原则、依赖倒转原则、单一职责原则、接口隔离原则、组合/聚合复用原则、迪米特法则。

    java设计模式(刘伟)

    - **接口隔离原则**:客户端不应该被迫依赖它不需要的接口。 - **合成复用原则**:尽量使用对象组合而不是继承来达到复用的目的。 - **迪米特法则**:一个对象应当尽可能少地与其他对象发生相互作用。 #### 三、...

    JAVA设计模式(java设计)

    通过对这些设计模式的学习和应用,开发者能够更好地理解软件设计的原则,如单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。这有助于编写出更具弹性、易于理解和维护的代码。在实际项目中,...

    JAVA design pattern-java设计模式

    因为它们基于普遍的软件设计原则,如开闭原则(Open-Closed Principle)、里氏替换原则(Liskov Substitution Principle)、依赖倒置原则(Dependency Inversion Principle)、接口隔离原则(Interface Segregation ...

    Java设计模式学习.pdf

    - 接口隔离原则(Interface Segregation Principle):不应强迫客户依赖于它们不用的方法。 - 合成复用原则(Composite Reuse Principle):尽量使用对象组合,而不是继承。 - 迪米特原则(Law of Demeter):一...

    JAVA版-设计模式解析(第二版)综合项目实战pdf文档+视频教程

    1. **设计原则**:首先,教程会介绍SOLID原则,包括单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些都是设计模式的基础,有助于编写出易于维护和扩展的代码。 2. **创建型模式**:...

    简单理解遵循接口隔离原则的Java设计模式编程

    在Java编程中,设计模式是一种重要的软件设计方法,它能够帮助我们编写更加可维护、可扩展的代码。...在Java设计模式编程中,理解和应用接口隔离原则至关重要,因为它有助于构建健壮且易于扩展的软件系统。

    java的23种设计模式-动力节点

    Java设计模式是软件工程中常见的设计范式,用于解决特定问题,提升代码的可维护性、可复用性和可扩展性。Java共有23种设计模式,它们可以根据不同的场景和目的被分类为三大类:创建型模式、结构型模式和行为型模式。...

    设计模式6大原则:接口隔离原则

    设计模式6大原则:接口隔离原则

    Java与模式-Java

    - **接口隔离原则**:客户端不应该被强迫依赖它不使用的方法。这可以通过将臃肿的接口拆分成更具体的接口来实现。 - **合成/聚合复用原则**:优先使用对象组合而不是继承来达到代码复用的目的,这有助于降低类间的...

    设计模式--java版.rar

    本资源“设计模式--java版.rar”提供了一种深入理解和应用Java设计模式的方式。 在Java开发中,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。创建型模式如单例(Singleton)、工厂方法(Factory ...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    5. **设计原则**:结合SOLID原则(单一职责、开闭原则、里氏替换、接口隔离和依赖倒置),分析如何通过设计模式实现这些原则。 通过解答课后习题和模拟试题,学生不仅能深入理解设计模式的精髓,还能提升分析问题和...

    design-pattern-java-2 设计模式-java版

    以上便是Java设计模式的主要知识,每一个设计模式都围绕着面向对象的六大设计原则来展开,它们分别是单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和合成复用原则。单一职责原则...

    Java面试题-设计模式+设计原则+代理.pdf

    * 接口隔离原则(ISP):客户端不应该被迫依赖它们不使用的接口。 * 合成/聚合复用原则(CRP):优先使用合成/聚合,而不是继承。 遵循这些设计原则可以使我们的软件系统更加灵活、可维护和可扩展。 本文总结了...

Global site tag (gtag.js) - Google Analytics