`
李灵晖-raylee
  • 浏览: 135858 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-7.3 接口怎样解耦?

 
阅读更多

这一章节我们来讨论一下接口怎么样解耦?使得代码灵活性增强。

我们先来看看下面的代码:

package com.ray.ch07;

public class Test {

	public static void test(Vehicle vehicle) {
		vehicle.test();
	}

	public static void main(String[] args) {
		test(new BMW());
		test(new Audi());
	}
}

class Vehicle {
	public void test() {
		System.out.println("Vehicle test");
	}
}

class BMW extends Vehicle {
	@Override
	public void test() {
		System.out.println("BMW test");
	}
}

class Audi extends Vehicle {
	@Override
	public void test() {
		System.out.println("Audi test");
	}
}



我们上面的代码主要描述的是车辆的测试。

我们再上另外一组代码:

package com.ray.ch07;

public class Test {

	public static void test(Instrument instrument) {
		instrument.test();
	}

	public static void main(String[] args) {
		test(new Wind());
		test(new Bass());
	}
}

class Instrument {
	public void test() {
		System.out.println("Instrument test");
	}
}

class Wind extends Instrument {
	@Override
	public void test() {
		System.out.println("Wind test");
	}
}

class Bass extends Instrument {
	@Override
	public void test() {
		System.out.println("Bass test");
	}
}


上面一组代码主要描述乐器的测试。

对比两组代码,其实大家会发现,测试的主代码里面大家都差不多,但是由于乐器和汽车都不是继承同样的基类,因此,测试代码不能够通用。

不能够通用的原因主要就是Instrument和Vehicle这两个类与Test耦合太深。我们下面通过接口,把两个类组合起来,使得Test里面的代码可以通用。

package com.ray.ch07;

public class Test {

	public static void test(TestObjectInterface testObjectInterface) {
		testObjectInterface.test();
	}

	public static void main(String[] args) {
		test(new Wind());
		test(new Bass());
		test(new BMW());
		test(new Audi());
	}
}

interface TestObjectInterface {
	void test();
}

class Instrument implements TestObjectInterface {
	@Override
	public void test() {
		System.out.println("Instrument test");
	}
}

class Wind extends Instrument {
	@Override
	public void test() {
		System.out.println("Wind test");
	}
}

class Bass extends Instrument {
	@Override
	public void test() {
		System.out.println("Bass test");
	}
}

class Vehicle implements TestObjectInterface {
	@Override
	public void test() {
		System.out.println("Vehicle test");
	}
}

class BMW extends Vehicle {
	@Override
	public void test() {
		System.out.println("BMW test");
	}
}

class Audi extends Vehicle {
	@Override
	public void test() {
		System.out.println("Audi test");
	}
}


我们建立一个通用接口,然后两个基类分别实现接口,然后通过向上转型,实现多态,使得TestObjectInterface这个父类指向各个不同的子类的,从而调用不同子类的方法。

在这里我们再扩展一下,上面的代码里面其实是运用了策略设计模式。TestObjectInterface一直是执行算法里面固定的部分,然后通过不同类型的传入,分别执行不同的实现。

总结:我们这一章节主要讲述了接口怎样解耦。

这一章节就到这里,谢谢。

-----------------------------------

目录

分享到:
评论

相关推荐

    LFS-BOOK-7.3.pdf

    该书由杰勒德·比克曼斯等人编写,并由马修·伯格斯和布鲁斯·杜布斯编辑,版本为7.3。这本书的版权归属于1999-2013年间的杰勒德·比克曼斯,根据Creative Commons License授权,允许在MIT License下从书中提取...

    mchange-commons-java-0.2.11.zip

    在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...

    eclipse-java-2021-12-R-win32-x86_64.zip

    用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...

    api-ntrip-java-client-master.zip_android_ntrip_ntrip java实现_ntr

    标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...

    aip-java-sdk-4.2.0

    标签 "aip sdk" 进一步确认了这是一个与百度AIP相关的SDK,通常这样的SDK会提供一系列预先封装好的接口,使得开发者可以快速地在自己的项目中集成AI功能,而无需从头开始编写复杂的算法和模型。 在压缩包的文件名称...

    MCS-51.rar_51?????ASM

    7. **串行通信接口**:具有全双工的UART接口,可以进行串行数据传输。 【ASM子程序库】是预先编写好的汇编语言函数集合,这些函数通常经过优化,执行效率高且功能明确。在“MCS-51单片机实用子程序库.txt”中,可能...

    aspose-words-java-23.6-jdk17.jar.zip

    【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...

    手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip

    【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...

    java-Swing外观包

    Java Swing是Java GUI(图形用户界面)开发的一个重要组件,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。Swing提供了丰富的组件库,允许开发者创建美观且功能丰富的交互式用户界面。在这个...

    java-多文件上传dome

    在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。

    java-lib

    "java-lib"是一个与Java编程相关的资源集合,很可能包含了各种常用的Java库,这些库可以帮助开发者在进行Java开发时提高效率,解决特定问题。"java-all-lib"的标签可能表示这个压缩包包含了广泛的Java库,涵盖了多种...

    java-sdk-master.zip_leancound集成第三方插件_即时通讯

    Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时。在这个名为"java-sdk-master.zip"的压缩包中,包含的是Leancound的Java SDK,这是一个专为集成Leancound服务而设计的开发工具包。Leancound是...

    Java---笔试题大全

    Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。在Java笔试中,这些概念经常被考察。 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,分为过程抽象(方法)和...

    SmartAdmin1.8.7.3-HTML-fullAndseed

    1.8.7.3版本里的HTML全版本+种子开发版本,9月前最新啦,不信去看...非常适合从头开始构建应用程序。无论你想在.Net,PHP,Django,Java还是其他任何平台上构建它,HTML版本应该是理想的选择!

    ks-java-lib:包含 Java 的 KS 库

    【标题】"ks-java-lib:包含 Java 的 KS 库" 提供的是一个专门为 Java 开发者设计的库,它扩展了 Java 的功能,为开发者在处理特定任务时提供了便利。这个库可能包含了丰富的类和方法,旨在简化开发过程,提高代码的...

    curso-java-pildorasInf:从头开始学习Java

    【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...

    使用渲染脚本实现模糊视图背景 - Java - 下载.zip

    在Java开发中,创建具有模糊效果的视图背景可以提升应用程序的用户体验,使其看起来更加现代和精致。"使用渲染脚本实现模糊视图背景"是一个常见的技术实践,它通常涉及到图形处理和用户界面的设计。在这个项目中,...

    java-pdf&word-jar.zip

    Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...

    Free Spire.Doc for Java - 3.9 无水印

    **Free Spire.Doc for Java - 3.9 无水印** `Free Spire.Doc for Java` 是一款专为Java开发者设计的文档处理库,它允许用户在Java应用程序中创建、编辑和转换Microsoft Word文档。这个3.9版本提供的是无水印版本,...

Global site tag (gtag.js) - Google Analytics