`

面向对象设计的原则------接口隔离原则

阅读更多

接口隔离原则(Interface Segregation Principle)

1、接口隔离原则的定义:

第一种定义: 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。一个类对另外一个类的依赖性应当是建立在最小的接口上的。

换句话说,使用多个专门的接口比使用单一的总接口总要好,建立单一接口,不要建立臃肿庞大的接口。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。不应当将几个不同的角色都交给同一个接口,而应当交给不同的接口。

2、接口污染定义:

所谓接口污染就是为接口添加了不必要的职责。在接口中加一个新方法只是为了给实现类带来好处,以减少类的数目。持续这样做,接口就被不断污染,变胖。实际上,类的数目根本不是什么问题,接口污染会带来维护和重用方面的问题。最常见的问题是我们为了重用被污染的接口,被迫实现并维护不必要的方法。因此,我们必须分离客户程序,分离客户程序就是分离接口。

3、分离接口的实现方法:

分离接口的方式一般分为两种:

1) 使用委托分离接口。(Separation through Delegation

就把请求委托给别的接口的实现类来完成需要的职责,就是适配器模式(Adapter)

2) 使用多重继承分离接口。(Separation through Multiple Inheritance。)

该方法通过实现多个接口来完成需要的职责。

两种方式各有优缺点,通常我们应该先考虑后一个方案,如果涉及到类型转换时则选择前一个方案。

4、实例

假如有一个Door,有lockunlock功能,另外,可以在Door上安装一个Alarm而使其具有报警功能。用户可以选择一般的Door,也可以选择具有报警功能的Door

要遵循ISP设计原则,方案如下:

1、在IAlarm接口定义alarm方法,在IDoor接口定义lockunlock方法。接口之间无继承关系。CommonDoor实现IDoor接口。


public interface IDoor {

    public void lock();

    public void unlock();

}

public interface IAlarm {

    public void alarm();

}

public class CommonDoor implements IDoor {

    public void lock() {

       System.out.println("CommonDoor is lock!");

    }

    public void unlock() {

       System.out.println("CommonDoor is unlock!");

    }

}


AlarmDoor2种实现方案:

1)同时实现IDoorIAlarm接口。

public class AlarmDoor implements IDoor, IAlarm {

    public void lock() {

       System.out.println("AlarmDoor is lock!");

    }

    public void unlock() {

       System.out.println("AlarmDoor is unlock!");

    }

    public void alarm() {

       System.out.println("AlarmDoor is alarm!");

    }

}

2)继承CommonDoor,并实现Alarm接口。该方案是继承方式的Adapter设计模式的实现。

此种方案更具有实用性。

public class AlarmDoor extends CommonDoor implements IAlarm {

    public void lock() {

       super.lock();

    }

    public void unlock() {

       super.unlock();

    }

    public void alarm() {

       System.out.println("AlarmDoor is alarm!");

    }

}

2、采用委让实现


public interface IDoor {

    public void lock();

    public void unlock();

}

public interface IAlarm {

public void lock();

public void unlock();

    public void alarm();

}

public class CommonDoor implements IDoor {

    public void lock() {

       System.out.println("CommonDoor is lock!");

    }

    public void unlock() {

       System.out.println("CommonDoor is unlock!");

    }

}


采用委托的方式即采用对象适配器的方式

public class AlarmDoor implements IAlarm {

    private CommonDoor commdoor=new CommonDoor();

    public void lock() {

       commdoor.lock();

    }

    public void unlock() {

       commdoor.unlock();

    }

    public void alarm() {

       System.out.println("AlarmDoor is alarm!");

    }

}

5、小结

如果已经设计成了胖接口,可以使用适配器模式隔离它。像其他设计原则一样,接口隔离原则需要额外的时间和努力,并且会增加代码的复杂性,但是可以产生更灵活的设计。如果我们过度的使用它将会产生大量的包含单一方法的接口,所以需要根据经验并且识别出那些将来需要扩展的代码来使用它。

 

分享到:
评论

相关推荐

    Ruby 面向对象设计实践--2013年

    - **接口隔离原则**(Interface Segregation Principle, ISP):客户端不应该被迫依赖它不使用的方法。 - **依赖倒置原则**(Dependency Inversion Principle, DIP):高层模块不应该依赖低层模块,二者都应该依赖其...

    面向对象的设计原则--ooprinciples

    ### 面向对象的设计原则——开放关闭原则详解 #### 一、背景介绍 面向对象编程(Object-Oriented Programming, OOP)是一种广泛应用于现代软件工程的方法论,旨在通过抽象、封装、继承和多态等特性提高软件的可复用...

    面向对象设计原则.ppt

    4. **接口隔离原则(ISP)**:客户端不应该被迫依赖它不使用的方法。如果一个接口包含客户端不需要的方法,应该拆分为多个更小的接口。这有助于减少类之间的耦合。 5. **依赖倒置原则(DIP)**:高层次模块不应该...

    23种 设计模式---面向对象的基本原则

    4. 接口隔离原则(Interface Segregation Principle, ISP):不应该强迫客户端依赖于它们不需要的方法。将大的接口拆分为小的、更具体的接口,使得客户端只需关注所需的部分。 5. 依赖倒置原则(Dependency ...

    面向对象设计原则(SRP,OCP,LSP,DIP,ISP)

    面向对象 设计原则 单一职责原则--SRP 开放封闭原则--OCP Liskov替换原则--LSP 依赖倒置原则--DIP 接口隔离原则--ISP

    程序员必备的七大面向对象设计原则

    面向对象设计原则总结 面向对象设计原则是软件设计中最重要的原则之一,它们是软件设计的基础和核心。面向对象设计原则的应用可以提高软件的开发效率、质量和可维护性。下面是七大面向对象设计原则的总结: 一、开...

    对面向对象设计原则的总结

    对面向对象设计原则的总结,设计模式:“开-闭”原则,里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则

    C++设计模式课件2_面向对象设计原则.pdf

    5. **接口隔离原则(Interface Segregation Principle, ISP)** - **原则阐述**:客户端不应该被迫依赖于它不使用的方法。 - **实践意义**:通过精简接口设计,减少类之间的耦合,使系统更加易于理解和扩展。 6. ...

    面向对象设计原则

    面向对象设计原则是Java开发中不可或缺的基础,它们指导着开发者创建可维护、可扩展和可复用的软件系统。本文将深入探讨其中的两个核心原则:“开-闭”原则(Open-Closed Principle, OCP)和里氏代换原则(Liskov ...

    面向对象设计原则英文文章

    首先,我们来了解四个基础的面向对象设计原则:单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)和接口隔离原则(ISP)。 1. 单一职责原则(Single Responsibility Principle, SRP):一个类或模块...

    面向对象设计原则解析

    4. **接口隔离原则(Interface Segregation Principle, ISP)** 这个原则建议将大的、臃肿的接口分解为更小、更具体的接口,确保客户端只使用他们真正需要的方法。这样做可以减少类之间的耦合度,提高灵活性。 5. ...

    java面向对象设计的六大原则

    DIP)、接口隔离原则(Interface Segregation Principle, ISP)以及合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)。 #### 1. 单一职责原则(Single Responsibility Principle, SRP) - **定义...

    面向对象设计原则和设计模式的概念

    面向对象设计原则与设计模式是软件工程领域的重要组成部分,它们为构建高质量、可维护和可扩展的软件系统提供了指导方针。下面将详细阐述面向对象设计原则及其如何促进软件的复用,以及设计模式的概念。 ### 面向...

    UML简介与面向对象的设计原则

    4. **接口隔离原则(ISP)**:客户端不应该强迫依赖它不使用的接口方法。接口应该被分解为更小、更具体的接口。 5. **依赖倒置原则(DIP)**:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖...

    面向对象原则.zip

    1面向对象6大原则--单一职责原则 2面向对象6大原则--里氏代换原则 3面向对象6大原则--开闭原则 4面向对象6大原则--依赖倒转原则 5面向对象6大原则--合成复用原则 6面向对象6大原则--接口隔离原则

    面向对象设计原则PPT

    面向对象设计原则概述 单一职责 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则

    面向对象思想----不看后悔!

    5. **接口隔离原则**(Interface Segregation Principle,ISP):客户端不应该被迫依赖它不使用的方法。 6. **迪米特法则**(Law of Demeter,LoD):一个对象应该对其他对象有最少的了解。 通过遵循这些原则,可以...

    C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

    4. 接口隔离原则(ISP):客户端不应该被迫依赖它不使用的方法。接口应该尽可能小且具体,避免过大的接口导致不必要的耦合。 5. 依赖倒置原则(DIP):依赖于抽象,而不是依赖于具体实现。这样可以更容易地替换实现...

Global site tag (gtag.js) - Google Analytics