Java 如何以模式获得符合价值的服务?

Java 如何以模式获得符合价值的服务?,java,design-patterns,refactoring,factory-pattern,Java,Design Patterns,Refactoring,Factory Pattern,我想根据角色值,得到相关的服务,比如 LogisticsUserEntity user = this.getLogisticsUserById(userId); UserDealService userDealService = getUserDealService(user.getRole()); UserEntity userEntity = userDealService.getUserEntity(user); LogisticsUserDao和TruckOwnerDao都实现User

我想根据角色值,得到相关的服务,比如

LogisticsUserEntity user = this.getLogisticsUserById(userId);
UserDealService userDealService = getUserDealService(user.getRole());
UserEntity userEntity = userDealService.getUserEntity(user);
LogisticsUserDao和TruckOwnerDao都实现UserDealService接口。 如果角色是4,driverDao返回,如果是5,truckOwnerDao返回,但我已经使用了

@Autowired
private DriverDao driverDao;
@Autowired
private TruckOwnerDao truckOwnerDao;
我不想用地图,比如

put(4, driverDao);
因为如果我想添加其他dao,我必须修改代码,它违反了打开-关闭规则

那么我如何解决扩展问题呢


提前感谢您的帮助和建议。

评论中已经提到,您需要一家工厂,但工厂很少

工厂-创建对象而不向客户机公开实例化逻辑,并通过公共接口引用新创建的对象。是工厂方法的简化版本

工厂方法-定义用于创建对象的接口,但让子类决定实例化哪个类,并通过公共接口引用新创建的对象

抽象工厂-提供用于创建相关对象族的接口,无需显式指定其类

我会考虑工厂方法,这样你的“用户”对象会有方法“用户.CuraSerueDeloService()”返回所需的服务。 但我不确定这是否应该称为服务,服务是可远程调用的对象


顺便说一下,基于用户获取userEntity看起来很奇怪。用户不是实体吗?

似乎是使用工厂模式的典型案例。看一看写一个“UserDealServiceFactory”。然后自动连接它!;)那么为什么要这样做
UserEntity UserEntity=userDealService.getUserEntity(user)?因为用户实体需要两个表列来构造,所以您应该在一个位置构造用户实体,这样您的应用程序逻辑就不会了解持久性基础结构。阅读有关存储库模式的内容,它将对您有所帮助。