在项目中的意义:
在传统的项目开发过程中,由于客户的需求经常变化,如果不采用面向接口编程,那么我们必须不停改写现有的业务代码。改写代码可能产生新的BUG,而且改写代码还会影响到调用该业务的类,可能全都需要修改,影响系统本身的稳定性。而且为了将改写代码带来的影响最小,我们不得不屈服当前的系统状况来完成设计,代码质量和稳定性更低。当这种情况积累到一定程度时,系统就会出现不可预计的错误,代码凌乱,不易读懂,后接手的人无法读懂代码,系统的维护工作越来越重,最终可能导致项目失败。
接口在项目就是一个业务逻辑,面向接口编程就是先把客户的业务提取出来,作为接口。业务具体实现通过该接口的实现类来完成。当客户需求变化时,只需编写该业务逻辑的新的实现类,通过更改配置文件(例如Spring框架)中该接口的实现类就可以完成需求,不需要改写现有代码,减少对系统的影响。
采用基于接口编程的项目,业务逻辑清晰,代码易懂,方便扩展,可维护性强。即使更换一批人员,新来的人依然可以快速上手。对于公司来说,意义更大。
在Java中的意义:
Java本身也是一个不断完善的语言,他也在频繁的改动他的系统API来完善,他的API是一个庞大的体系,互相关联,如果不采用接口,而都是用实现类的话,那么API的改动就会给整个体系带来不稳定。而且如果改动API,那么就会有大量采用旧API的项目因无法正常运行,会损失大量客户。换句话说,JDK已经发布的API是一种承诺,一经发布就不能更改,即使原来API存在各种各样的问题(例如java.util.Properties类就是一个失败的例子)也必须保留,于是在Java里就出现了不建议使用的方法,但JDK依然提供该方法。而且Java语言本身是一个跨平台的语言,为了满足在各个平台下运行,就必须把各种操作做成接口,在编写各个平台下的实现类。
设计模式的体现:
在设计模式的原则里的开闭原则,其实就是要使用接口来实现对扩展开放,对修改关闭。在设计模式的其他原则里也有关于基于接口编程的原则,即依赖倒转的设计原则(DIP)----高层模块不应该依赖于底层模块。二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象(注:来自《敏捷软件开发--原则、模式与实践》Robert C.Martin著)。在使用面向接口的编程过程中,将具体逻辑与实现分开,减少了各个类之间的相互依赖,当各个类变化时,不需要对已经编写的系统进行改动,添加新的实现类就可以了,不在担心新改动的类对系统的其他模块造成影响。
编程也是一门艺术,在C语言中灵活的使用指针是一门艺术,在面对对象的程序中,灵活的使用接口也是一门艺术。现在项目中,功能越来越复杂,只设计了完美的类,对于整个系统来说没有多大意义,现在的项目更注重各个功能模块的整合及可维护性,接口的设计就显得更为重要了。程序设计不再是设计类的具体实现,而是从整个项目出发,设计出可扩展性强的接口。当你发现越来越灵活的使用接口时,那么你就从程序员升级为架构师了。可惜我现在依然是一名程序员,正在像架构师努力。
在一些大型项目或者大型公司里,都是由架构师编写出系统接口,具体的实现类交给了程序员编写,公司越大这种情况越明显,所以在这些公司里做开发,我们可能都不知道编写出的系统是个什么样子,每天做的工作可能就是做“填空题”了。建议大家阅读敏《捷软件开发--原则、模式与实践》Robert C.Martin著这本书,那么对如何进行接口编程就会有一个新的认识了。
最后,希望大家都能成为一个优秀的系统架构师。
我记得我曾经在一篇帖子中提到过,一个接口可以从三方面去考察:
制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者)。
接口本质上就是由制定者来协调实现者和调用者之间的关系。
所以通常说的“面向接口编程”可以理解为:
只有实现者和调用者都遵循“面向接口编程”这个准则,制定者的协调目的才能达到。
一个老生常谈的例子就是JDBC。
优点:
接口和实现分离了,适于团队的协作开发。
更具体的优点:可以参看IDP原则。
缺点:
设计难了,在你没有写实现的时候,就得想好接口,接口一变,全部乱套,这就是所谓的设计比实现难。
所以设计接口的人工资都高啊!!!
分享到:
相关推荐
2. **解耦合**:面向接口编程的主要优点是实现了组件间的解耦。这意味着实现类可以独立于它们的使用者发展,因为它们之间的交互是通过接口进行的。这样,即使实现类发生改变,只要接口保持不变,调用者就不需要修改...
面向接口编程的优点是可以提高系统的灵活性和可维护性,因为它使系统更加松散耦合,易于修改和扩展。同时,它也可以提高系统的可重用性,因为接口可以被多个对象共享。 在java中,面向接口编程是通过使用接口和抽象...
面向接口编程的主要优点有以下几点: 1. **解耦**:接口使得实现者与调用者之间不再直接依赖,而是通过接口进行间接通信。这降低了类与类之间的耦合度,使得系统更加灵活,易于修改和扩展。 2. **多态性**:通过...
2. **面向接口编程的优点**: - **解耦合**:通过定义接口,实现了组件间的解耦,使得各个模块可以独立开发和测试,降低了系统的复杂性。 - **可扩展性**:新的实现可以轻松地添加到系统中,因为它们只需要实现已...
在本文中,我们将通过一个实例来详细解释面向接口编程的思想和优点。 问题提出:我们要开发一个应用,模拟移动存储设备的读写,即计算机与 U 盘、MP3、移动硬盘等设备进行数据交换。这个问题的关键在于,计算机必须...
面向接口编程的一个主要优点是提高了代码的可测试性。当我们的代码依赖于接口而不是具体的实现时,可以通过注入模拟的实现(Mock)来测试代码,这样就无需实际运行依赖的组件,简化了单元测试的过程。 此外,它也...
面向接口编程是软件设计中的一个重要原则,特别是在C#这样的面向对象编程语言中。它强调了程序应依赖于接口,而不是具体的实现,这样可以提高代码的灵活性、可测试性和可维护性。在“c#数据库面向接口编程”项目中,...
在本项目"JSP_javabean_DAO_面向接口编程_工程模式.rar"中,我们将探讨如何结合JavaBean、DAO(Data Access Object)、面向接口编程以及工厂模式来构建一个高效且可维护的Web应用程序。 首先,JavaBean是Java中的一...
虽然面向接口编程具有诸多优点,但也存在一些局限性: - 过度依赖接口可能会导致系统设计过于复杂。 - 接口的变更可能会导致大量的实现类需要修改。 - 如果接口设计不当,可能会降低代码的可读性和可维护性。 #### ...
这展示了面向接口编程的优点,即可以轻松地更换不同的实现类,而不需要修改原来的代码。 6. 面向对象程序设计的优点 面向对象程序设计的优点包括: * 松耦合:通过接口来定义对象的行为,而不是通过继承。 * 高度...
2. Java面向接口编程的概念和优点 * Java面向接口编程是一种编程思想,强调使用接口来定义对象的行为,而不是具体的实现细节。 * 使用面向接口编程可以提高代码的灵活性和可扩展性,使得代码更加灵活和可维护。 3. ...
面向过程的优点在于结构清晰、逻辑简单,易于理解和实现,特别适合于解决线性问题。然而,随着软件规模的增大,过程间的耦合度高,代码的重复率也高,导致维护和扩展变得困难。 面向对象(Object-Oriented ...
本文将探讨使用面向对象编程(OOP)来管理数据库的优点。 首先,使用存取方法(Accessor methods)是面向对象数据库操作的一大优势。存取方法允许对类的属性进行读取和设置,同时提供了控制和验证的机制。例如,...
### 面向切面编程的优点 1. **降低耦合度**:通过将横切关注点从业务逻辑中分离出来,AOP 可以显著降低代码间的耦合度。 2. **可维护性和可扩展性**:由于横切关注点被集中管理,因此更容易进行修改和扩展,而不会...
接口的主要优点是它们允许不同类之间进行通信,而无需知道对方的具体实现,这有助于实现设计模式,如策略模式和观察者模式。 面向对象编程是基于对象的编程范式,其核心概念包括封装、继承和多态。在Delphi中,类...
使用面向服务软件体系结构的接口模型可以带来多种优点,例如可重复使用、可扩展性和可维护性。首先,接口模型定义了服务的公共契约,使得不同服务之间可以相互调用和重用,降低了开发和维护成本。其次,通过使用标准...
10. **挑战与最佳实践**:尽管面向对象有许多优点,但过度使用或不恰当的设计可能导致问题,如类爆炸、紧耦合等。因此,遵循SOLID原则(单一职责、开闭、里氏替换、接口隔离、依赖倒置),以及使用合适的设计模式,...
面向对象编程的主要优点包括提高代码的可重用性、模块化和易于维护等。许多现代编程语言如C#、Java、Python等都支持面向对象编程。 #### 三、面向过程编程 面向过程编程是一种更传统的编程方法,它侧重于定义解决...
这种方式的优点是逻辑清晰,易于理解和调试,但缺点是代码的复用性较差,当需求变更或需要添加新功能时,可能需要修改大量代码。 面向对象编程则是自顶向下的设计方法,它强调的是数据和操作数据的方法(即对象)的...
本课题设计开发的面向单片机接口的新型LCD显示控制器系统,改变了现有的LCD显示控制器硬件电路的设计结构,能实现更强大的控制功能。新的LCD 显示控制器系统能实现定义前景、背景色功能;写前景/背景色功能(即可以一...