如果可以动态的将一个构件移走,并以另一个构件取代之,那么这种构件就是可插入构件。接口是实现构件的可插入性的关键。
一、什么是接口
一个java接口是一些方法特征的集合,这些方法特征当然来自于具体方法,但是他们一般都是来自于一些在系统中不断出现的方法。一个接口只有方法的特征,而没有方法的实现,这些方法在不同的地方被实现,可以具有完全不同的行为。
在人们讲到“接口”的时候,这个词往往有两种不同的含义:第一种是指java接口,这是一种java语言中存在的结构,有特定的语法和结构;另一种仅仅是指一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做java接口,后者就叫做接口。
在java中一个方法的特征仅包括方法的名字、参量的数目和种类,而不包括方法的返回值类型、参量的名字以及所抛出的异常。在java编译器检查方法的重载(Overload)时,会根据这些条件判断两个方法是否是重载方法。但是在java编译器检查方法的置换(Override)是,则会进一步检查两个方法的返回类型和抛出的异常是否相等。
一个java接口的方法只能是抽象的和公开的,java接口不能有构造函数,并且接口可以有public、静态的和final的属性;接口中还可以定义一些常量。
接口和类的最重要区别是,接口仅仅描述方法的特征,而不给出方法的实现;而类不仅给出方法的特征,而且给出方法的实现。因此,接口把方法的特征和方法的实现分隔开来。这种分隔,体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色可以由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求有任何其他的共同之处。
二、为什么要用接口
一个对象需要知道其他一些对象,并与其他的对象发生相互作用,这是由于这些对象需要借助其他对象以便实现一项功能。如果对象在引用其他对象的时候,直接引用的是其他具体的对象,那么在以后的升级修改过程中,这些引用具体的对象可替代性几乎为零,也就是可插入性几乎为零。
那么基于基类的继承是否可以提供一些帮助呢?我们在使用过程中通过抽象超类声明(声明出子类要提供的行为),然后有不同的子类继承自这个超类并以不同的方式实现了这个超类所声明的行为。客户端可以动态的决定使用哪个具体子类,这是否可以提供可插入行呢?
这确实可以在简单的情况下提供可插入性。但是由于java是单继承的。因此,在很多情况下,这个具体类可能已经有了一个超类,这时候,再给他加上一个新的超类是不可能的。如果非要实现的话,就只能把这个新的超类添加到已有的超类上面,形成超类的超类。这样一来,对于一个具体类的可插入性设计,很容易形成这个等级结构中的所有类的修改。更糟糕的是,如果上面的超类不能进行修改,这样我们的整个设想就无法实现了。
通过上面的讨论,我们就能清楚的看到,没有接口,可插入性就没有保证。
在一个类等级结构中的任何一个类都可以实现一个接口,这个接口会影响到此类的所有子类,但是不会影响到此类的任何超类。此类将不得不实现这个接口所规定的方法,而其子类则可以从此类自动继承到这些方法,当然也可以选择置换掉所有的这些方法,或者其中的某一些方法。这时候,这些子类就具有了可插入性。
① 关联的可插入性
正如前面所说的,一个对象需要完成一项任务,就需要知道其他的对象,并且调用其他对象的方法。这个对象对其他对象的知识叫做关联。
如果一个关联不是针对一个具体类的,而是针对一个接口的,那么任何实现这个接口的类都可以满足要求。换言之,当前对象并不在意所关联的是哪一个具体类,而仅仅关心这个类是否实现了某个接口。这样一来,就可以动态的将这个关联从一个具体类转到另一个具体类,而这样做的唯一条件是他们都实现了某个接口。
②调用的可插入性
同样,一个对象不可避免的需要调用其他对象的方法。这种调用不一定非得是某一个具体类,而可以是一个接口。这样一来,任何实现了这个接口的具体类都可以被当前对象调用;而当前对象到底调用的是哪一个具体类的实例则完全可以动态的决定。
因此,接口提供了关联以及方法调用上的可插入性。软件系统的规模越大,生命周期越长,接口的重要性就越大。接口使得软件系统在灵活性和可扩展性、可插入性方面得到保证。
三、工程中的应用
设计师应当使用java接口和抽象java类将软件单位的内部和外部耦合起来。换言之,应当使用java接口和抽象类而不是具体类进行变量的声明、参数的类型声明,以及数据类型的转换等。当然,一个更好的做法是仅仅使用java接口,而不是使用抽象java类来做到上面这些。
本文通过总结《java与模式》而来。
相关推荐
Java语言编程规范是软件开发中不可或缺的一部分,尤其在大型企业如华为技术有限公司中,遵循统一的编程规范至关重要。这样的规范确保了代码的可读性、可维护性和团队间的高效协作。下面将详细解读华为公司对Java编程...
16. Lambda表达式与函数式接口:Java 8引入的新特性,简化代码并支持函数式编程。 17. Stream API:学习如何使用Stream处理集合数据,进行过滤、映射、聚合等操作。 18. 泛型与集合的结合使用:如泛型集合、泛型...
《Java编程模式与范例》是一本深入探讨Java编程中常用设计模式和实践案例的书籍。这本书旨在帮助Java开发者理解和应用各种编程模式,提升代码质量和可维护性。设计模式是软件开发中的宝贵经验总结,它们代表了在特定...
"源码软件"表明此资源包中可能包含了实际的Java源代码文件,这些代码可能是精心编写的示例程序,用于演示特定的编程技术、设计模式或者解决特定问题的方法,用户可以阅读、分析甚至修改这些源代码来加深对Java编程的...
【JAVA编程模式与范例】这个压缩包文件主要聚焦于Java编程中的设计模式和实例应用。设计模式是软件工程中经过实践验证的、在特定场景下解决常见问题的有效方法,而Java作为广泛应用的面向对象编程语言,其设计模式的...
在Java编程的学习过程中,实践是提升技能的关键。"Java编程71-100例"是一份涵盖了多种Java编程概念和技巧的实例集合,旨在帮助开发者深入理解和掌握Java语言的核心特性。下面,我们将对这些实例涉及的主要知识点进行...
例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...
### Java中的面向对象编程 #### 一、面向对象编程(OOP)概念 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它使用“对象”来设计软件和实现程序。对象是数据(属性)和方法(操作这些数据的...
【标题】"ptf4--------JAVA经典教程"揭示了这是一份关于Java编程语言的教程,可能是一个系列的第四部分,通常这样的命名方式表明它是一个逐步深入的学习资源。"PTF"可能是“Programming Tutorial for”或者是某个...
《深入浅出Java语言程序设计》是一本专为学习和理解Java编程语言而设计的教材。这本书涵盖了从基础到高级的Java编程概念,旨在帮助读者深入理解Java的各个方面,从而能够熟练地进行软件开发。 首先,Java语言是面向...
《Java并发编程实践》是Java开发者深入理解并发编程的重要参考资料,尤其对于想要提升多线程应用设计和性能优化技能的程序员来说,这本书提供了丰富的实践经验和深入的理论知识。以下是根据提供的章节内容概述的一些...
以上知识点覆盖了Java并发编程的主要方面,包括线程管理、同步机制、并发工具、设计模式、并发集合以及并发编程的最佳实践等,是理解和掌握Java并发编程的关键。在实际开发中,理解和熟练运用这些知识可以编写出高效...
Java编程题是程序员面试中不可或缺的部分,它们旨在测试候选人的逻辑思维、问题解决能力和对Java语言的深入理解。"程序员面试之葵花宝典之JAVA编程题.doc"这份文档很可能包含了大量精选的Java编程题目,这些题目可能...
10. **接口与抽象类**:用于实现多态和设计模式,比如单例模式、工厂模式等。 这个压缩包中的200题可能包含以上各个领域的实例和问题,通过解答这些题目,你将能够巩固基础,加深理解,并学会如何在实际场景中应用...
5. **接口与抽象类**:接口是Java中的一个重要概念,它用于实现多继承。抽象类则是含有抽象方法的类,用于作为其他类的模板。 6. **异常处理**:Java通过try-catch-finally结构来处理程序运行时可能出现的异常,...
15. **设计模式**:23种经典设计模式是解决常见问题的最佳实践,如工厂模式、单例模式、观察者模式等,它们在Java编程中广泛应用。 通过学习和实践这些Java编程的逻辑,开发者能够创建出高效、可靠且易于维护的软件...