背景:在开发的过程中已经需要提供多个接口给外围系统。服务端在实现想使用统一的方法处理多个接口,例如判断传入的参数是否合理。
1.定义两个接口
package org.common.single.inf;
import org.common.single.condition.Condition1;
public interface IQueryService extends IQueryBaseService{
public void myService(Condition1 condition);
}
package org.common.single.inf;
import org.common.single.condition.Condition2;
public interface IQueryService2 extends IQueryBaseService{
public void myService2(Condition2 condition);
}
package org.common.single.inf;
public interface IQueryBaseService {
}
这两个接口的实现类
import org.common.single.condition.Condition1;
import org.common.single.inf.IQueryBaseService;
import org.common.single.inf.IQueryService;
public class QueryServiceImpl extends QueryServiceBase implements IQueryService {
//具体的实现类
IQueryBaseService service;
public QueryServiceImpl(IQueryBaseService service) {
this.service = service;
}
@Override
public void myService(Condition1 condition) {
baseService(service,"myService",condition);
}
}
import org.common.single.condition.Condition2;
import org.common.single.inf.IQueryBaseService;
import org.common.single.inf.IQueryService2;
public class QueryService2Impl extends QueryServiceBase implements IQueryService2 {
//具体的实现类
IQueryBaseService service;
public QueryService2Impl(IQueryBaseService service) {
this.service = service;
}
@Override
public void myService2(Condition2 condition) {
baseService(service,"myService",condition);
}
}
import org.common.single.condition.Condition;
import org.common.single.inf.IQueryBaseService;
public class QueryServiceBase {
protected void baseService(IQueryBaseService service, String methedName, Condition condition) {
if (!condition.isVaild()){
System.out.println("condition is invaild");
} else {
try {
//这里的反射会存在性能问题,可使用MethodAccess缓存需要查找的函数反射的耗时
Method m = service.getClass().getMethod(methedName, condition.getClass());
m.invoke(service, condition);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
真正的实现类
import org.common.single.condition.Condition1;
import org.common.single.inf.IQueryService;
public class QueryClient implements IQueryService{
@Override
public void myService(Condition1 condition) {
System.out.println("query client service");
}
}
import org.common.single.condition.Condition2;
import org.common.single.inf.IQueryService2;
public class QueryClient2 implements IQueryService2{
@Override
public void myService2(Condition2 condition) {
System.out.println("query client service2");
}
}
条件类:
public class Condition1 implements Condition {
private int param;
@Override
public boolean isVaild() {
return param > 0;
}
public int getParam() {
return param;
}
public void setParam(int param) {
this.param = param;
}
}
public class Condition2 implements Condition{
private String param;
@Override
public boolean isVaild() {
return param != null;
}
}
public interface Condition {
public boolean isVaild();
}
测试一下:
import org.common.single.client.QueryClient;
import org.common.single.client.QueryClient2;
import org.common.single.condition.Condition1;
import org.common.single.condition.Condition2;
import org.common.single.inf.IQueryService;
import org.common.single.inf.IQueryService2;
import org.common.single.inf.impl.QueryService2Impl;
import org.common.single.inf.impl.QueryServiceImpl;
public class Main {
public static void main(String[] args) {
IQueryService serice = new QueryServiceImpl(new QueryClient());
Condition1 condition = new Condition1();
condition.setParam(2);
serice.myService(condition);
IQueryService2 serice2 = new QueryService2Impl(new QueryClient2());
Condition2 condition2 = new Condition2();
serice2.myService2(condition2);
}
}
打印结果:
query client service
condition is invaild
小结:这也可以理解为父类利用反射调用子类的方法
分享到:
相关推荐
Java服务端研发是软件开发中的一个重要领域,主要关注在服务器端进行程序设计、实现和维护。这个知识图谱源码的提供,旨在帮助开发者系统地理解和掌握Java在服务端开发中的核心技术和实践。以下是一些关键知识点的...
本篇文章将详细探讨一个由Delphi客户端与Java服务端组成的系统,通过完整的源码分析,深入理解两者如何协同工作,为开发者提供宝贵的实践指导。 一、Delphi客户端介绍 Delphi是一款强大的Windows应用开发工具,以其...
2. **多线程**:服务器通常需要同时处理多个客户端的请求,因此会用到多线程技术,每个客户端连接对应一个服务线程。 3. **序列化与反序列化**:Java的序列化机制可以将对象转化为字节流在网络间传输,反序列化则将...
- Java源码可能包含多个模块,如数据库连接、网络通信、游戏逻辑处理、安全性控制等。 3. **网络通信** - 使用Java的Socket编程实现TCP/IP协议,用于可靠的数据传输。服务端接收客户端的请求,解析数据并作出响应...
在“多客户端”场景下,服务端需要有能力处理多个并发连接。这通常通过创建线程或使用NIO(非阻塞I/O)来实现。当一个客户端连接到服务器时,服务器会为该连接创建一个新的线程,这样就能同时处理多个客户端的请求。...
**服务端**:服务端通常由Java的Servlet或Spring Boot等框架构建,它负责处理来自多个客户端的请求,例如购票、退票、查询票务信息等。服务端需要确保并发控制,因为多个网点可能同时尝试购买同一张票。这可能涉及...
7. **服务器架构**:为了支持多客户端同时访问,服务端可能需要采用多线程或异步处理机制。此外,负载均衡和流媒体分发技术也可能被引入,以优化性能和提高可用性。 8. **安全性**:在实际部署中,视频流服务端可能...
【标题】"java高级服务端阅读资料pdf6-11" 涵盖了一系列深入的Java服务端开发主题,这是一份专为提升Java开发者在服务端编程技能的参考资料。这些文档可能包括了Java高级特性、框架、设计模式、并发处理、性能优化等...
2. **网络通信**:CS架构中的通信通常基于TCP/IP协议,Java提供了Socket编程接口,用于创建客户端和服务端的连接。理解套接字编程,包括Socket和ServerSocket类,是实现客户端和服务器间数据传输的基础。 3. **多层...
综上所述,这个项目涉及了Java后端开发的多个关键方面,包括服务端架构设计、数据库操作、API接口设计以及项目管理。开发者可以通过研究这个源码学习到如何使用SpringBoot和Mybatis来构建高效且可扩展的服务端应用。
总的来说,Java Socket开发高并发小型服务器涉及到网络通信的基本原理、Java语言的网络编程接口、多线程技术以及服务器性能优化等多个方面,是Java开发者需要掌握的重要技能。通过深入理解和实践,开发者可以构建出...
教育系统服务端可能包含多个微服务,例如: - **用户服务**:处理用户注册、登录、权限管理等。 - **课程服务**:管理课程信息,包括课程详情、分类、评价等。 - **教学资源服务**:存储和分发视频、文档等教学资料...
Java课程设计中的“客户端和服务端交互下载器”是一个典型的网络编程项目,它涉及到Java的核心概念和技术,包括网络通信、多线程以及文件操作等。在这个项目中,客户端和服务器通过TCP/IP协议进行通信,实现文件的...
【标题】"虎牙小游戏服务端_java.zip"指的是一个基于Java编程语言...但根据标题和描述,我们可以推断这个项目包含了一个完整的Java服务端实现,对于学习和理解Java游戏服务端开发的开发者来说,这是一个宝贵的资源。
游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与...
总结来说,Java的多线程服务器源码展示了如何结合`ServerSocket`和多线程来实现一个能同时处理多个客户端连接的服务端程序。通过这种方式,开发者可以构建出高效、响应迅速且易于扩展的网络应用程序。在实际开发中,...
通过分析这份源码,开发者不仅可以学习到Java服务端开发的基本技巧,还能深入理解视频会议系统的架构设计和优化策略,对于提升自己的技术水平和解决实际问题的能力大有裨益。同时,也可以根据自己的需求对源码进行...
游戏服务端通常需要处理多个客户端的并发请求,这就需要开发者具备良好的并发编程能力。Java的并发API,如ExecutorService、Future、Callable、synchronized关键字等,可以帮助构建高效的并发模型。 【数据库操作】...
2. 配置 ChannelPipeline:每个连接都有一个 ChannelPipeline,它可以包含多个处理器(ChannelHandler)来处理进来的数据或发送出去的数据。在服务端,通常需要添加解码器(如 ByteToMessageDecoder)来解析接收到的...