这一章节我们来聊聊接口与工厂模式之间的关系。
接口是实现多重继承的途径,生成遵循某个接口协议的对象的典型方式是工厂设计模式。
这种设计模式使得接口与实现完全分开。
package com.ray.ch07;
interface Service {
void doSomeThing();
}
interface ServiceFactory {
Service getService();
}
class ServiceImpl implements Service {
@Override
public void doSomeThing() {
}
}
class ServiceFactoryImpl implements ServiceFactory {
@Override
public Service getService() {
// TODO Auto-generated method stub
return null;
}
}
public class Test {
public static void test(ServiceFactory factory) {
Service service = factory.getService();
service.doSomeThing();
}
public static void main(String[] args) {
test(new ServiceFactoryImpl());
}
}
从上面的代码看出,我们只是在最后一步new的时候,才把实现类放进去,其他的代码基本以接口来实现,从而把接口与实现完全分离,这样有利于Test这个代码的重复使用。
那么,怎么使用呢?
我们下面给出例子:(就是有多个Service的时候,Test就可以重复使用了)
package com.ray.ch07;
interface Service {
void doSomeThing();
}
interface ServiceFactory {
Service getService();
}
class ServiceImpl implements Service {
@Override
public void doSomeThing() {
}
}
class ServiceFactoryImpl implements ServiceFactory {
@Override
public Service getService() {
// TODO Auto-generated method stub
return null;
}
}
class ServiceImpl2 implements Service {
@Override
public void doSomeThing() {
}
}
class ServiceFactoryImpl2 implements ServiceFactory {
@Override
public Service getService() {
// TODO Auto-generated method stub
return null;
}
}
public class Test {
public static void test(ServiceFactory factory) {
Service service = factory.getService();
service.doSomeThing();
}
public static void main(String[] args) {
test(new ServiceFactoryImpl());
test(new ServiceFactoryImpl2());
}
}
当我们有n个Service的实现类时,我们只需要写一份Test代码,然后根据实际情况new不同的实现类,这样就可以重复使用Test的代码来测试。
最后,工厂模式这些设计模式还有其他很多的应用,我们将在另外的一个课程里面讨论,这里不再做详细展开。
总结:这一章节主要讨论了接口与设计模式之间的关系。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
标签 "jar" 和 "java" 明确了这个文件与Java编程语言和JAR文件格式的关系。Java开发者经常使用JAR文件来分发和部署他们的软件,因为它们可以作为一个单元被导入到其他项目中,或者作为独立的应用程序运行。JAR文件还...
用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...
标签 "aip sdk" 进一步确认了这是一个与百度AIP相关的SDK,通常这样的SDK会提供一系列预先封装好的接口,使得开发者可以快速地在自己的项目中集成AI功能,而无需从头开始编写复杂的算法和模型。 在压缩包的文件名称...
在标签中,“ntrip__java实现”表明这个客户端是用Java编程语言编写的,这是Android应用开发的常见选择,因为Java与Android SDK兼容性良好。“ntrip_android_client”和“ntrip_client”则明确了这是一个面向Android...
【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...
在本设计模式课程设计中,我们重点探讨了五个核心的设计模式:原型模式、单例模式、抽象工厂模式、代理模式和建造者模式。这些模式在Java编程中具有广泛的应用,能够帮助开发者创建更加灵活、可扩展和易于维护的代码...
【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...
Java提供了两种内置的LookAndFeel:Metal(默认的Java Look and Feel)和SystemLookAndFeel,后者可以使Swing组件看起来与宿主操作系统(如Windows、Mac OS X或Linux)的原生控件一致。此外,开发者还可以自定义Look...
在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。
工厂方法模式定义了一个创建对象的接口,但让实现这个接口的子类决定实例化哪一个类。工厂方法将类的实例化推迟到子类,这为创建对象提供了灵活性。当一个类不需要知道它所创建的对象的具体类型时,或者希望延迟实例...
Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时。在这个名为"java-sdk-master.zip"的压缩包中,包含的是Leancound的Java SDK,这是一个专为集成Leancound服务而设计的开发工具包。Leancound是...
"java-lib"是一个与Java编程相关的资源集合,很可能包含了各种常用的Java库,这些库可以帮助开发者在进行Java开发时提高效率,解决特定问题。"java-all-lib"的标签可能表示这个压缩包包含了广泛的Java库,涵盖了多种...
Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。在Java笔试中,这些概念经常被考察。 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,分为过程抽象(方法)和...
【标签】"Java" 表明这个库是专门为 Java 语言设计的,与 Java 语法兼容,并且可以在 Java 虚拟机(JVM)上运行。这意味着它可能使用了 Java 核心库中的接口和类,并且遵循了 Java 的编程规范。对于 Java 开发者来说...
【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...
在 Java 开发中,Builder 模式是一种强大的创建型模式,它允许我们逐步构建复杂的对象。本文将详细介绍 Builder 模式的意图、解释、编程示例、适用场景以及实际应用。同时,还将提供示例代码的下载链接,方便读者...
在Java开发中,创建具有模糊效果的视图背景可以提升应用程序的用户体验,使其看起来更加现代和精致。"使用渲染脚本实现模糊视图背景"是一个常见的技术实践,它通常涉及到图形处理和用户界面的设计。在这个项目中,...
7. 与其他格式互转:支持PDF与XML、TXT、图片等格式的转换。 以上就是`java-pdf&word-jar.zip`压缩包中涉及到的Java库的关键功能和应用场景。开发者可以结合这些库,轻松地在Java程序中实现对PDF和Word文档的高效...