该文章转自IT实验室,希望起到抛砖引玉的功效
----------------------------------------------------------------
措施二:把参数类型改成接口
正如Allen Holub在《Build User Interfaces for Object-Oriented Systems》中所指出的,在面向对象编程中,代码重用真正的要点在于通过接口参数类型利用多态性,而不是通过类继承:
“……我们通过对接口而不是对类编程达到代码重用的目的。如果某个方法的所有参数都是对一些已知接口的引用,那么这个方法就能够操作这样一些对象:当我们编写方法的代码时,这些对象的类甚至还不存在。从技术上说,可重用的是方法,而不是传递给方法的对象。”
在“措施一”得到的结果上应用Holub的看法,当某块代码能够编写为独立的全局过程时,只要把它所有类形式的参数改为接口形式,我们就可以进一步提高它的可重用能力。经过这个改动之后,过程的参数可以是实现了该接口的所有类的对象,而不仅仅是原来的类所创建的对象。由此,过程将能够对可能存在的大量的对象类型进行操作。
例如,假设有这样一个全局静态方法:
static public boolean contains(Rectangle rect, int x, int y) {...}
这个方法用于检查指定的点是否包含在矩形里面。在这个例子中,rect参数的类型可以从Rectangle类改变为接口类型,如下所示:
static public boolean contains(Rectangular rect, int x, int y) {...}
而Rectangular接口的定义是:
public interface Rectangular {Rectangle getBounds();}
现在,所有可以描述为矩形的类(即,实现了Rectangular接口的类)所创建的对象都可以作为提供给pRectangular.contains()的rect参数。通过放宽参数类型的限制,我们使方法具有更好的可重用性。
不过,对于上面这个例子,Rectangular接口的getBounds方法返回 Rectangle,你可能会怀疑这么做是否真正值得。换言之,如果我们知道传入过程的对象会在被调用时返回一个Rectangle,为什么不直接传入 Rectangle取代接口类型呢?之所以不这么做,最重要的原因与集合有关。让我们假设有这样一个方法:
static public boolean areAnyOverlapping(Collection rects) {...}
该方法用于检查给定集合中的任意矩形对象是否重叠。在这个方法的内部,当我们用循环依次访问集合中的各个对象时,如果我们不能把对象cast成为Rectangular之类的接口类型,又如何能够访问对象的矩形区域呢?唯一的选择是把对象 cast成为它特有的类形式(我们知道它有一个方法可以返回矩形),它意味着方法必须事先知道它所操作的对象类型,从而使得方法的重用只限于那几种对象类型。而这正是前面这个措施力图先行避免的问题!
分享到:
相关推荐
关于提高Java代码可重用性的三个措施,本文将深入探讨并详细解释这些策略,帮助开发者在实际项目中更好地实现代码的复用。 ### 第一措施:优化类的设计 #### 设计模式的应用 设计模式是软件工程领域的重要概念,...
8. **代码重构**:定期进行代码重构,优化代码结构,提取重复部分到独立的函数或类中,可以持续提高代码的重用性。 9. **接口优先**:尽可能使用接口而不是具体实现进行编程,这使得系统更易于替换或扩展,因为接口...
代码重用性是Java应用开发中一个非常重要的概念,它可以提高代码的可靠性、软件生产的效率和代码的一致性。为了更好地实现代码重用,需要使用面向接口编程、代码分离、内聚性设计和耦合度控制等策略。在实际的应用...
本文将介绍三种提高 Java 代码重用性的方法:改写类的实例方法、选择最简单的参数接口类型和把参数类型改成接口。 一、改写类的实例方法 在 Java 中,方法不能脱离类而单独存在。为了提高代码的重用性,我们可以把...
Java代码可重用性的实现策略有多种,包括接口编程、改写类的实例方法和代码分离等。这些方法可以帮助我们提高开发效率、简化代码和减少开发成本。但是,在实际应用中,我们需要根据实际情况选择合适的策略,避免代码...
- **选择最简单的参数接口类型**:在有多重实现可能的情况下,应选择能满足方法需求且包含最少额外代码和数据的接口,以增加重用的机会。 2. **内聚性和耦合度**: 为了提高代码重用性,需要确保代码具有高内聚性...
5. **调用本地方法**:Java代码通过调用已加载的本地方法来执行具体的功能。 #### 五、示例代码解析 假设有一个简单的Java类`Adder`,其中包含了一个本地方法`add`: ```java public class Adder { static { ...
2. 代码重用:泛型可以将类型参数化,使得代码可以应用于多种类型。 3. 代码简洁:泛型可以减少类型转换的代码,使得代码更加简洁。 泛型的基本概念: 1. 类型参数:泛型的核心概念是类型参数,例如 List<E> 中的 ...
Java 泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型接口是泛型在接口中的应用,它允许我们在接口中定义带有类型参数的方法,使得实现该接口的类可以使用不同的数据类型。下面...
Web服务(WebService)是一种基于XML...这不仅简化了开发流程,还使得不同系统间的互操作性得以实现,促进了软件组件的重用和集成。在实际项目中,应根据项目需求和团队习惯选择合适的工具,以提高开发效率和代码质量。
Java泛型是Java 5中引入的一项强大特性,它允许在编译时提供类型安全,同时提高代码的重用性和可读性。泛型的本质是参数化类型,即在类、接口和方法中使用类型作为参数。本文将深入探讨Java泛型的工作原理、应用场景...
10. **泛型**:泛型引入了类型参数,提高了代码的类型安全性和重用性,避免了类型转换的麻烦。 11. **Lambda表达式**:Java 8引入的lambda表达式简化了函数式编程,使得编写简洁、可读性强的代码成为可能。 12. **...
在Java编程中,接口(Interface)是一种重要的抽象数据类型,它定义了一组方法签名,这些方法由实现该接口的类来具体实现。接口可以看作是一种契约或者协议,规定了实现该接口的类必须遵循的行为规范。接口本身不能...
- 泛型引入后,可以在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 9. **注解(Annotation)**: - 注解是元数据的一种形式,可以提供编译器或运行时系统使用的信息。 10. **...
本文将深入探讨Java基础练习代码中的关键概念,帮助初学者巩固基础,提高编程技能。 首先,Java是一种面向对象的编程语言,它的核心特性包括封装、继承和多态。在练习代码中,你会看到如何定义类(class)并创建...
10. **ch6**: 可能讲解了多态性,这是面向对象编程的一个核心概念,允许父类引用指向子类对象,增强了代码的灵活性和重用性。 通过研究这些章节的源代码,学习者可以深入理解每个知识点的实际应用,并通过实践来...
实际项目中需要使用泛型来增加类型安全性和重用性的开发任务。 目标: 本代码资源的目标是帮助读者理解泛型的用法和优势,并通过实际的示例代码加深对泛型的掌握。读者可以通过运行这些示例代码来观察泛型的行为和...
11. **泛型**:泛型引入了类型参数的概念,提高了代码的类型安全性和重用性。它可以用于类、接口和方法。 12. **注解(Annotation)**:注解为元数据提供了一种方式,可以在编译时或运行时被解析,用于简化配置、...
7. **泛型**:泛型引入于Java 5,提高了代码的类型安全性和重用性,允许在类、接口和方法中使用类型参数。 8. **枚举**:Java的枚举类型提供了一种创建固定数量常量的优雅方式,比传统的final static变量更安全。 ...
Java中的泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型方法是泛型概念的一个关键部分,它允许我们在方法签名中使用类型参数,从而使方法能够处理不同类型的参数。在这个“Java...