iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java一个接口多个实现得调用
  • 870
分享到

java一个接口多个实现得调用

java代理模式开发语言 2023-08-16 15:08:30 870人浏览 泡泡鱼
摘要

在 Java 中,如果一个接口有多个实现类,可以通过以下几种方式来调用不同的实现类: 根据具体实现类的类型进行调用: InterfaceA objA = new ImplementationA();InterfaceA objB = new

在 Java 中,如果一个接口有多个实现类,可以通过以下几种方式来调用不同的实现类:

  1. 根据具体实现类的类型进行调用:
InterfaceA objA = new ImplementationA();InterfaceA objB = new ImplementationB();objA.method(); // 调用 ImplementationA 的实现方法objB.method(); // 调用 ImplementationB 的实现方法
  1. 利用接口的引用,根据条件判断调用不同的实现类:
InterfaceA obj;if (condition) {    obj = new ImplementationA();} else {    obj = new ImplementationB();}obj.method(); // 根据条件调用不同的实现类方法
  1. 集合中存储不同的实现类对象,通过循环遍历调用:
List objects = new ArrayList<>();objects.add(new ImplementationA());objects.add(new ImplementationB());for (InterfaceA obj : objects) {    obj.method(); // 循环遍历调用不同实现类的方法}
  1. 使用工厂模式或依赖注入框架来动态获取不同的实现类对象:
InterfaceA obj = ObjectFactory.getInstance().createInterfaceA();obj.method(); // 动态获取实现类对象并调用方法

需要根据具体的应用场景和需求选择适合的方式来调用不同的实现类。在代码中,根据接口类型、条件判断、集合遍历或动态获取实例等方式,可以灵活地调用不同的实现类的方法。

,除了上述方案,还有以下一些方案可以实现在 Java 中调用多个实现类:

  1. 使用注解:通过为实现类添加特定的注解,在需要调用的地方通过注解扫描来获取实现类,并进行调用。
  2. 使用代理模式:通过动态代理机制,在运行时生成代理对象,并在代理对象中根据条件调用不同的实现类的方法。
  3. 使用配置文件:将不同实现类的信息配置在文件中,通过读取配置文件来获取实现类,并进行调用。
  4. 使用动态加载:使用 Java 的动态加载机制,根据类名或条件动态加载不同的实现类,并进行调用。

工厂模式得示例代码一

当涉及到工厂模式时,可以按照以下步骤实现:

创建接口:

public interface ProductService {    void getProductInfo();}

创建具体的实现类:

public class ProductAService implements ProductService {    @Override    public void getProductInfo() {        System.out.println("Product A info");    }}public class ProductBService implements ProductService {    @Override    public void getProductInfo() {        System.out.println("Product B info");    }}

创建工厂类:

public class ProductServiceFactory {    public static ProductService createProductService(String productType) {        if (productType.equalsIgnoreCase("A")) {            return new ProductAService();        } else if (productType.equalsIgnoreCase("B")) {            return new ProductBService();        } else {            throw new IllegalArgumentException("Invalid product type");        }    }}

使用工厂类获取实例并调用方法:

public class Main {    public static void main(String[] args) {        ProductService productServiceA = ProductServiceFactory.createProductService("A");        productServiceA.getProductInfo(); // 输出:Product A info        ProductService productServiceB = ProductServiceFactory.createProductService("B");        productServiceB.getProductInfo(); // 输出:Product B info    }}

在上述示例中,通过工厂类的静态方法 createProductService 根据传入的参数(产品类型)动态创建具体的实现类对象。根据不同的产品类型,工厂类返回不同的实例,并通过接口引用调用对应的方法。这样可以在运行时决定具体使用哪个实现类,而无需在代码中直接创建对象。

工厂模式得示例代码(Map实现)二

通过 Map 来实现工厂模式是一种常见的方式,可以将不同的产品类型与对应的实现类进行映射。以下是使用 Map 实现工厂模式的示例代码:

创建接口:

public interface ProductService {    void getProductInfo();}

创建具体的实现类:

public class ProductAService implements ProductService {    @Override    public void getProductInfo() {        System.out.println("Product A info");    }}public class ProductBService implements ProductService {    @Override    public void getProductInfo() {        System.out.println("Product B info");    }}

创建工厂类:

import java.util.HashMap;import java.util.Map;public class ProductServiceFactory {    private static final Map productMap = new HashMap<>();    static {        productMap.put("A", new ProductAService());        productMap.put("B", new ProductBService());    }    public static ProductService createProductService(String productType) {        ProductService productService = productMap.get(productType);        if (productService == null) {            throw new IllegalArgumentException("Invalid product type");        }        return productService;    }}

使用工厂类获取实例并调用方法:

public class Main {    public static void main(String[] args) {        ProductService productServiceA = ProductServiceFactory.createProductService("A");        productServiceA.getProductInfo(); // 输出:Product A info        ProductService productServiceB = ProductServiceFactory.createProductService("B");        productServiceB.getProductInfo(); // 输出:Product B info    }}

在这个示例中,工厂类通过一个静态的 Map 对象将产品类型与对应的实现类进行映射。在工厂类的 createProductService 方法中,根据传入的产品类型从 Map 中获取对应的实现类实例,并返回给调用方。这样,在运行时可以根据不同的产品类型获取对应的实例对象。

工厂模式得示例代码(注解实现)三

以下是一个使用注解实现多个实现类调用的示例代码:

定义注解:

import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface MyImplementation {    String value();}

创建接口:

public interface MyInterface {    void doSomething();}

创建具体的实现类,并使用注解标记:

@MyImplementation("A")public class ImplementationA implements MyInterface {    @Override    public void doSomething() {        System.out.println("Implementation A");    }}@MyImplementation("B")public class ImplementationB implements MyInterface {    @Override    public void doSomething() {        System.out.println("Implementation B");    }}

创建工厂类,使用注解扫描获取对应实现类:

import java.util.HashMap;import java.util.Map;public class MyFactory {    private static final Map implementations = new HashMap<>();    static {        // 扫描带有@MyImplementation注解的类,并将其实例化并放入implementations Map中        Reflections reflections = new Reflections("com.example");        Set> annotatedClasses = reflections.getTypesAnnotatedWith(MyImplementation.class);        for (Class annotatedClass : annotatedClasses) {            MyImplementation annotation = annotatedClass.getAnnotation(MyImplementation.class);            String implementationKey = annotation.value();            try {                MyInterface implementation = (MyInterface) annotatedClass.newInstance();                implementations.put(implementationKey, implementation);            } catch (InstantiationException | IllegalAccessException e) {                e.printStackTrace();            }        }    }    public static MyInterface getImplementation(String key) {        return implementations.get(key);    }}

使用工厂类获取实例并调用方法:

public class Main {    public static void main(String[] args) {        MyInterface implementationA = MyFactory.getImplementation("A");        implementationA.doSomething(); // 输出:Implementation A        MyInterface implementationB = MyFactory.getImplementation("B");        implementationB.doSomething(); // 输出:Implementation B    }}

在这个示例中,通过自定义的注解 @MyImplementation 标记具体的实现类,然后使用反射扫描带有该注解的类,并实例化放入工厂类的 implementations Map 中。通过工厂类的 getImplementation 方法,根据指定的实现类标识符获取对应的实现类实例。然后就可以通过实例调用接口定义的方法

工厂模式得示例代码(枚举实现)四

枚举也可以用于实现工厂模式,其中每个枚举常量都代表一个具体的实现类。以下是一个使用枚举实现工厂模式的示例代码:

public interface MyInterface {    void doSomething();}public class ImplementationA implements MyInterface {    @Override    public void doSomething() {        System.out.println("Implementation A");    }}public class ImplementationB implements MyInterface {    @Override    public void doSomething() {        System.out.println("Implementation B");    }}public enum MyFactory {    IMPLEMENTATION_A {        @Override        public MyInterface create() {            return new ImplementationA();        }    },    IMPLEMENTATION_B {        @Override        public MyInterface create() {            return new ImplementationB();        }    };    public abstract MyInterface create();}public class Main {    public static void main(String[] args) {        MyInterface implementationA = MyFactory.IMPLEMENTATION_A.create();        implementationA.doSomething(); // 输出:Implementation A        MyInterface implementationB = MyFactory.IMPLEMENTATION_B.create();        implementationB.doSomething(); // 输出:Implementation B    }}

在这个示例中,枚举 MyFactory 表示工厂,每个枚举常量代表一个具体的实现类。每个枚举常量都实现了抽象方法 create(),该方法用于创建对应的实现类对象。在 Main 类中,通过枚举常量调用 create() 方法来创建具体的实现类对象,并调用接口方法

来源地址:https://blog.csdn.net/yuanchengfu0910/article/details/130929538

--结束END--

本文标题: java一个接口多个实现得调用

本文链接: https://www.lsjlt.com/news/371465.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java一个接口多个实现得调用
    在 Java 中,如果一个接口有多个实现类,可以通过以下几种方式来调用不同的实现类: 根据具体实现类的类型进行调用: InterfaceA objA = new ImplementationA();InterfaceA objB = new...
    99+
    2023-08-16
    java 代理模式 开发语言
  • java实现一个接口调取另一个接口(接口一调取接口二)
    目录java一个接口调取另一个接口工具类springboot中使用(接口一)接口二接口的调用与调用别人的接口别人调用我们的接口,与controller方法开发类似我们调用别人的接口j...
    99+
    2024-04-02
  • Python:多态(一个接口多种实现)
    class Animal(object):----def init(self,name):--------self.name=name def talk(self): pass @staticmethod def animal_ta...
    99+
    2023-01-31
    接口 多种 多态
  • java在接口中怎么调用另外一个接口
    在Java中,接口之间可以通过继承或实现的方式进行调用。1. 继承方式:如果一个接口A继承自另一个接口B,那么A可以调用B中的所有方...
    99+
    2023-09-13
    java
  • Java 中怎么实现一个Runnable接口
    这期内容当中小编将会给大家带来有关Java 中怎么实现一个Runnable接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。但是Java Runnable 接口并没有任何对线程的支持,我们还必须...
    99+
    2023-06-17
  • java利用webService 如何实现一个WSDL接口
    java利用webService 如何实现一个WSDL接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、使用JDK生成WSDL的对象类cmd进入JDK的bin文件中  ...
    99+
    2023-05-31
    java wsdl webservice
  • C#如何实现多个接口
    这篇文章主要介绍“C#如何实现多个接口”,在日常操作中,相信很多人在C#如何实现多个接口问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#如何实现多个接口”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一个...
    99+
    2023-06-17
  • C#怎么实现多个接口
    这篇文章主要讲解了“C#怎么实现多个接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么实现多个接口”吧!学习C#语言时,经常会遇到C#实现多个接口问题,这里将介绍C#实现多个接口问题...
    99+
    2023-06-17
  • spring注解识别一个接口的多个实现类方法
    1.比如有一个接口如下:public interface Filter { public String doFilter(String param); }...
    99+
    2023-05-31
    spring 注解 接口
  • Go Ginrest实现一个RESTful接口
    目录背景特性使用例子实现原理功能列表处理请求处理响应处理错误请求上下文操作请求结构体处理注背景 基于现在微服务或者服务化的思想,我们大部分的业务逻辑处理函数都是长这样的: 比如grp...
    99+
    2024-04-02
  • C#中怎么实现多个接口
    今天就跟大家聊聊有关C#中怎么实现多个接口,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。为了C#实现多个接口,我们可以从接口派生类。这样的派生类必须为所有接口的方法提供实现,除非派生...
    99+
    2023-06-17
  • Java实现调用对方http接口得到返回数据
    目录Java用对方http接口得到返回数据java后台工具类调用api接口,解析数据一、引入jar包二、httpclient请求接口工具类Java 用对方http接口得到返回数据 如...
    99+
    2024-04-02
  • C++中怎么实现一个接口
    C++中怎么实现一个接口,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。定理1:C++接口是依赖的终点。接口不需要依赖任何东西。推论1:依赖C++接口是安全的。不会带来更多的...
    99+
    2023-06-17
  • 利用java如何实现一个微信APP支付接口
    这篇文章给大家介绍利用java如何实现一个微信APP支付接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。开始开发1、配置相关的配置信息1、配置appid(Android)、mch_id(ios)、微信支付后的回调地址...
    99+
    2023-05-31
    java 支付
  • 怎么在java中创建一个接口实现类
    这期内容当中小编将会给大家带来有关怎么在java中创建一个接口实现类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型...
    99+
    2023-06-14
  • controller接口跳转到另一个controller接口的实现
    controller接口跳转到另一个controller接口 @RestController @RequestMapping("/aaa") public class TestC...
    99+
    2024-04-02
  • WCF中怎么实现一个ICommunicationObject接口
    本篇文章为大家展示了WCF中怎么实现一个ICommunicationObject接口,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。WCF托管特性ICommunicationObject接口publi...
    99+
    2023-06-17
  • C#中怎么实现一个IDisposable接口
    这期内容当中小编将会给大家带来有关C#中怎么实现一个IDisposable接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#语言有很多值得学习的地方,这里我们主要介绍C#实现IDisposable接口...
    99+
    2023-06-17
  • C#中怎么实现一个Strategy接口
    C#中怎么实现一个Strategy接口,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#实现Strategy接口应用常因用户输入、运行平台和部署环境等的不同执行的任务亦不相同。...
    99+
    2023-06-17
  • C#中怎么利用类实现一个接口
    这篇文章给大家介绍C#中怎么利用类实现一个接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#类实现接口前面我们已经说过,接口定义不包括方法的实现部分。接口可以通过类或结构来实现。我们主要讲述通过类来实现接口。用类来...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作