Java多态机制在实际中的应用

2023-10-31

在实际开发工作中,常常遇到一个功能有多种实现方式,比如支付方式,有分微信支付、京东支付、支付宝、银联等支付方式,不同支付方式的大概流程大抵相似,实现细节有所区别。这个时候就可以用到java的多态机制,先定义一个公共接口,接口定义支付流程的各个方法,具体的支付方式实现该接口的方法。在控制层,利用spring的注入获取支付类型和支付方式实现类的引用映射,根据请求需要的支付类型就可以调用对应支付方式的方法,以此实现业务的解耦和拓展。后期需要增加支付方式,只需要实现共同接口即可。

PaymentTypeService.java

/**
 * 支付方式接口
 * @date: 2018年4月23日 下午2:20:09
 */
public interface PaymentTypeService {

	public String type();
	
	public void methodA();
	
	public void methodB();
}

APaymentTypeServiceImpl.java

import org.springframework.stereotype.Service;

/**
 * 支付方式A实现类
 * @date: 2018年4月23日 下午2:20:27
 */
@Service
public class APaymentTypeServiceImpl implements PaymentTypeService {

	private final String type = "A";
	
	@Override
	public void methodA() {
		// TODO Auto-generated method stub
		System.out.println("PaymentType A invoke methodA");
	}

	@Override
	public void methodB() {
		// TODO Auto-generated method stub
		System.out.println("PaymentType A invoke methodB");
	}

	@Override
	public String type() {
		return type;
	}

}

BPaymentTypeServiceImpl.java

/**
 * 支付方式B实现类
 * @date: 2018年4月23日 下午2:20:27
 */
@Service
public class BPaymentTypeServiceImpl implements PaymentTypeService {

	private final String type = "B";
	
	@Override
	public void methodA() {
		// TODO Auto-generated method stub
		System.out.println("PaymentType B invoke methodA");
	}

	@Override
	public void methodB() {
		// TODO Auto-generated method stub
		System.out.println("PaymentType B invoke methodB");
	}

	@Override
	public String type() {
		return type;
	}

}

DemoController.java

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
	
	private Map<String, PaymentTypeService> paymentTypeServices;
	
	/**
	 * 构造函数初始化不同支付方式类型和实现类引用map
	 * @param services
	 */
	public DemoController(@Autowired List<PaymentTypeService> services){
		paymentTypeServices = services.stream().collect(Collectors.toMap(PaymentTypeService::type, i->i));
	}

	/**
	 * 请求某个支付方式
	 * @date: 2018年4月23日 下午2:21:28 
	 * @param type
	 */
	@GetMapping("/test/{type}")
	public void test(@PathVariable("type") String type){
		// 获取该支付方式实现类
		PaymentTypeService service = paymentTypeServices.get(type);
		service.methodA();
		service.methodB();
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java多态机制在实际中的应用 的相关文章

  • JavaSE进阶(二)—— 面向对象进阶(包、权限修饰符、抽象类、多态)

    目录 一 包 1 什么是包 2 导包 二 权限修饰符 1 什么是权限修饰符 2 权限修饰符的分类和具体作用范围 3 学完权限修饰符需要具备如下能力 三 final 1 final的作用 2 final修饰变量的注意 四 常量 1 常量概述和
  • 会些java知识,然后要学习spring boot大概需要多长时间?

    Spring boot要学什么 要学到什么程度 以及相关的学习方法是什么 学习spring boot大概需要多长时间 每个人的学习能力 每天能花费时间来学习的时间也是不确定的 这些很难量化 但极好形容 需要学到能帮你找到一份工作的程度 任何
  • java会话技术--02--服务器session共享

    java会话技术 02 服务器session共享 1 原理图 2 代码实现 2 1 接口代码 package cn zhou common web session import java io Serializable import jav
  • Java单例设计模式与多态

    DAY6 单例设计模式 定义 就是让一个类永远只产生一个对象 饿汉式 将构造方法私有化 在类内部创建一个私有的静态的最终的本类对象 提供一个共有的静态的返回值类型为本类对象的一个方法 代码实现 懒汉式 将构造方法私有化 在类内部声明一个私有
  • Unsafe学习

    一 介绍 一个管理内存的类 Unsafe类是 final 的 不允许继承 且构造函数是private的 使用单列模式模式获取类对象 1 1 测试的类 public class UnsafeBean private static int st
  • 设计模式之(二)---代理模式Proxy Pattern

    什么是代理模式呢 我很忙 忙的没空理你 那你要找我呢就先找我的代理人吧 那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧 那就是两个人具备同一个接口 代理人虽然不能干活 但是被 代理的人能干活呀 比如西门庆找潘金莲 那潘金莲不好意思答
  • c++多态及虚函数表内部原理实战详解

    1 多态实现方式 c 的多态机制主要是靠虚函数来实现 具体来说 就是用父类的指针指向子类的实例 然后通过父类指针调用子类对象中的成员函数 这样 就实现了父类指针的 多态 想了解虚函数实现机制 就必须先了解对象的存储方式 2 类的存储方式 我
  • java会话技术--03--Session覆盖问题

    java会话技术 03 Session覆盖问题 代码位置 https gitee com DanShenGuiZu learnDemo tree master sessionCookie learn 1 现象 同一域名 同一个服务 不同的端
  • JDBC快速入门,mysql8.0版本+druid+spring jdbc使用,出现因版本错误的解决方法

    JDBC核心技术 JDBC概述 数据持久化 持久化 persistence 把数据保存到可掉电式存储设备中以供之后使用 大多数情况下 特别是企业级应用数据持久化意味着将内存中的数据保存到硬盘上加以 固化 而持久化的实现过程大多通过各种关系数
  • Java面向对象三大特性(封装、继承、多态)

    文章目录 前言 一 封装 1 封装的概念 2 private实现封装 3 getter和setter方法 4 封装的好处 二 继承 1 继承的概念 2 extends实现继承 3 super 关键字 Object 4 访问权限 1 priv
  • 7. AES加密之base64编码

    整个加密的流程 编码算法 base64算法 与加密解密无关 只是对数据进行编码 方便在网络间进行传输 import org junit jupiter api Test import java nio charset StandardCha
  • 你知道Python基础包含哪些内容?学习什么吗?

    Python基础包含哪些内容 学习什么 学习Python基础了解Python语言起源 设计目标 设计哲学 Python语言的优缺点和面向对象的基本概念 执行方式 集成开发环境PyCharm的使用为Python的深入学习做铺垫 接下来小编就介
  • Kafka3.1安装配置,配置Kafka集群,Zookeeper集群

    1 下载Kafka安装包 Kafka官网下载地址 https kafka apache org downloads 2 解压压缩包 tar zxvf kafka 2 12 3 1 0 tgz c kafka 3 进入配置文件目录 cd ka
  • Objective-C中的继承与多态, Category, Extension

    1 继承与多态 先要理解实例变量的作用域 再看继承 即 子类的方法和属性 从父类继承得到的方法和属性 子类新增的方法和属性 例子 Person h import
  • NotePad++安装HEX-Editor插件

    在菜单栏点击插件 插件管理 搜索HEX Editor并打钩 点击安装 然后重新打开notepad 会发现工具栏多了一个H的符号 此时点击H 即可以16进制的形式读取当前文件 还是没有的话建议多试几次
  • C++ 抽象类

    抽象类 接口 接口描述了类的行为和功能 而无需完成类的特定实现 C 接口时通过抽象类实现的 设计抽象类的目的 是为了给其他类提供一个可以继承的适当的基类 抽象类本类不能被用于实例化对象 只能作为接口使用 注意 如果试图实例化一个抽象类的对象
  • 设计模式的 C++ 实现---原型模式

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 工厂方法模式 一 工厂方法模式 二 抽象工厂模式 一 抽象工厂模式 二 前言 原型模式指直接用一个已经存在的对象来创建一个新的对象 然后对新对象进行稍微修改即可 类似复制的操作
  • C++基础之纯虚函数

    一 纯虚函数的定义 纯虚函数是一种特殊的虚函数 在许多情况下 在基类中不能对虚函数给出有意义的实现 而把它声明为纯虚函数 它的实现留给该基类的派生类去做 这就是纯虚函数的作用 C 中的纯虚函数 一般在函数名后使用 0作为此类函数的标志 前面
  • Objective-C中的封装、继承、多态、分类

    封装 封装最好理解了 封装是面向对象的特征之一 是对象和类概念的主要特性 封装 也就是把客观事物封装成抽象的类 并且类可以把自己的数据和方法只让可信的类或者对象操作 对不可信的进行信息隐藏 继承 面向对象编程 OOP 语言的一个主要功能就是
  • Java学习13:面向对象-多态(Polymorphism)内存分析图解

    1 概述 多态是Java面向对象三大特征之一 多态 Polymorphism 顾名思义 即对象具有多种形态 具体而言 是编译时类型 运行时类型 编译时类型 由声明时的类型决定 一般是父类 运行时类型 由实际对应的对象类型决定 具体是哪个子类

随机推荐