Java 使用varags将许多类似的函数概括为一个
背景: 我目前有一个工作的java应用程序,它使用WorldWind在世界地图上显示各种类型的数据。数据通过RPC来自不同的客户端。每个调用都绑定到一个数据类型中,并具有如下各种参数:Java 使用varags将许多类似的函数概括为一个,java,design-patterns,variadic-functions,Java,Design Patterns,Variadic Functions,背景: 我目前有一个工作的java应用程序,它使用WorldWind在世界地图上显示各种类型的数据。数据通过RPC来自不同的客户端。每个调用都绑定到一个数据类型中,并具有如下各种参数: public synchronised ObjectID draw2DCircle(UUID userID, Position centre, Double radius){...} public synchronised ObjectID draw2DRectangle(UUID userID, Positio
public synchronised ObjectID draw2DCircle(UUID userID, Position centre, Double radius){...}
public synchronised ObjectID draw2DRectangle(UUID userID, Position centre, Double width, Double length){...}
对于每个绘制方法,还有一个更新方法:
public synchronised boolean update2DCircle(UUID userID, ObjectID objID, Position newCentre, Double newRadius).
每个数据类型都有自己的类,因此draw2DCircle有一个MapSurfaceCircle类,draw2DRectangle有一个MapSurfaceRectangle。类型之间有很多共同点,我有各种数据类型分组接口,如2D形状、3D形状等,但所有对象都有一个共同的接口,即具有render、preRender、move等调用的IMapObject接口
绘图函数的操作流程如下所示:
update2DCircle(Args){return shape.updateShape(Args);}
update2DRectangle(Args){return shape.updateShape(Args);}
每个形状都有实现:
private boolean updateShape(Object ...){}
我知道我正在失去对varags的类型检查,但是类型检查是在进行调用的RPC实现上完成的
我的另一个想法是不更新形状,而是在每次调用draw/update方法时创建一个新的形状,但这稍微复杂一些,因为形状可能会从内部WorldWind方法(在EDT上)更改,RPC方法发生在不同的线程上,所以我需要某种形状锁定
问题:
根据我所解释的,我提出的任何解决方案看起来都是正确的方法,还是我现有的设置还可以?有没有更好的解决方案使用一些我没有想到的设计模式
我试图尽可能多地将此作为一个编程问题(与意见相反),以满足SO规则,尽管我确实理解它的含义,但这不是我的意图:)我相信该模式是您应该使用的模式模板模式是我在原始问题中提到的解决方案(IMapObject接口,带有一个由形状实现的通用更新方法)。我猜它有两个投票权;我的和你的;)