`
lionzm
  • 浏览: 12476 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 服务端提供多个接口时小架构

    博客分类:
  • java
阅读更多
背景:在开发的过程中已经需要提供多个接口给外围系统。服务端在实现想使用统一的方法处理多个接口,例如判断传入的参数是否合理。
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服务端研发知识图谱_源码.rar

    Java服务端研发是软件开发中的一个重要领域,主要关注在服务器端进行程序设计、实现和维护。这个知识图谱源码的提供,旨在帮助开发者系统地理解和掌握Java在服务端开发中的核心技术和实践。以下是一些关键知识点的...

    delphi客户端+JAVA服务端

    本篇文章将详细探讨一个由Delphi客户端与Java服务端组成的系统,通过完整的源码分析,深入理解两者如何协同工作,为开发者提供宝贵的实践指导。 一、Delphi客户端介绍 Delphi是一款强大的Windows应用开发工具,以其...

    基于c/s架构的JAVA聊天程序 ,服务端和客户端都有

    2. **多线程**:服务器通常需要同时处理多个客户端的请求,因此会用到多线程技术,每个客户端连接对应一个服务线程。 3. **序列化与反序列化**:Java的序列化机制可以将对象转化为字节流在网络间传输,反序列化则将...

    天堂2 服务端java源码

    - Java源码可能包含多个模块,如数据库连接、网络通信、游戏逻辑处理、安全性控制等。 3. **网络通信** - 使用Java的Socket编程实现TCP/IP协议,用于可靠的数据传输。服务端接收客户端的请求,解析数据并作出响应...

    多客户端和服务端通讯

    在“多客户端”场景下,服务端需要有能力处理多个并发连接。这通常通过创建线程或使用NIO(非阻塞I/O)来实现。当一个客户端连接到服务器时,服务器会为该连接创建一个新的线程,这样就能同时处理多个客户端的请求。...

    java 售票系统 服务端与客户端

    **服务端**:服务端通常由Java的Servlet或Spring Boot等框架构建,它负责处理来自多个客户端的请求,例如购票、退票、查询票务信息等。服务端需要确保并发控制,因为多个网点可能同时尝试购买同一张票。这可能涉及...

    java版rtp视频流服务端

    7. **服务器架构**:为了支持多客户端同时访问,服务端可能需要采用多线程或异步处理机制。此外,负载均衡和流媒体分发技术也可能被引入,以优化性能和提高可用性。 8. **安全性**:在实际部署中,视频流服务端可能...

    java高级服务端阅读资料pdf6-11

    【标题】"java高级服务端阅读资料pdf6-11" 涵盖了一系列深入的Java服务端开发主题,这是一份专为提升Java开发者在服务端编程技能的参考资料。这些文档可能包括了Java高级特性、框架、设计模式、并发处理、性能优化等...

    java cs架构系统参考

    2. **网络通信**:CS架构中的通信通常基于TCP/IP协议,Java提供了Socket编程接口,用于创建客户端和服务端的连接。理解套接字编程,包括Socket和ServerSocket类,是实现客户端和服务器间数据传输的基础。 3. **多层...

    JAVA人流密度检测服务端源码,采用SpringBoot和Mybatis框架为数据采集端提供数据收集的接口

    综上所述,这个项目涉及了Java后端开发的多个关键方面,包括服务端架构设计、数据库操作、API接口设计以及项目管理。开发者可以通过研究这个源码学习到如何使用SpringBoot和Mybatis来构建高效且可扩展的服务端应用。

    Java_Socket开发高并发小型服务器

    总的来说,Java Socket开发高并发小型服务器涉及到网络通信的基本原理、Java语言的网络编程接口、多线程技术以及服务器性能优化等多个方面,是Java开发者需要掌握的重要技能。通过深入理解和实践,开发者可以构建出...

    java教育系统服务端

    教育系统服务端可能包含多个微服务,例如: - **用户服务**:处理用户注册、登录、权限管理等。 - **课程服务**:管理课程信息,包括课程详情、分类、评价等。 - **教学资源服务**:存储和分发视频、文档等教学资料...

    Java课程设计(客户端和服务端交互下载器)

    Java课程设计中的“客户端和服务端交互下载器”是一个典型的网络编程项目,它涉及到Java的核心概念和技术,包括网络通信、多线程以及文件操作等。在这个项目中,客户端和服务器通过TCP/IP协议进行通信,实现文件的...

    虎牙小游戏服务端_java.zip

    【标题】"虎牙小游戏服务端_java.zip"指的是一个基于Java编程语言...但根据标题和描述,我们可以推断这个项目包含了一个完整的Java服务端实现,对于学习和理解Java游戏服务端开发的开发者来说,这是一个宝贵的资源。

    游戏服务端,Java分布式微服务架构.zip

    游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与...

    java多线程服务器源码

    总结来说,Java的多线程服务器源码展示了如何结合`ServerSocket`和多线程来实现一个能同时处理多个客户端连接的服务端程序。通过这种方式,开发者可以构建出高效、响应迅速且易于扩展的网络应用程序。在实际开发中,...

    Java视频会议服务端(源码)

    通过分析这份源码,开发者不仅可以学习到Java服务端开发的基本技巧,还能深入理解视频会议系统的架构设计和优化策略,对于提升自己的技术水平和解决实际问题的能力大有裨益。同时,也可以根据自己的需求对源码进行...

    Java游戏服务端简历模板.zip

    游戏服务端通常需要处理多个客户端的并发请求,这就需要开发者具备良好的并发编程能力。Java的并发API,如ExecutorService、Future、Callable、synchronized关键字等,可以帮助构建高效的并发模型。 【数据库操作】...

    Netty实现简单的客户端服务端通信示例

    2. 配置 ChannelPipeline:每个连接都有一个 ChannelPipeline,它可以包含多个处理器(ChannelHandler)来处理进来的数据或发送出去的数据。在服务端,通常需要添加解码器(如 ByteToMessageDecoder)来解析接收到的...

Global site tag (gtag.js) - Google Analytics