我想根据角色值来获得相关服务,比如
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,我必须修改代码,它违反了open-closed。
那么如何解决扩展问题?
提前感谢您的所有帮助和建议。
答案 0 :(得分:0)
正如评论中已经提到的那样,你需要一个工厂,但工厂很少。
Factory - 创建对象而不将实例化逻辑暴露给客户端,并通过公共接口引用新创建的对象。是Factory Method
的简化版本工厂方法 - 定义用于创建对象的接口,但让子类决定实例化哪个类,并通过公共接口引用新创建的对象。
Abstract Factory - 提供用于创建相关对象族的界面,而无需明确指定其类。
我会考虑工厂方法,那样你的“用户”对象将有方法“user.createUserDealService()”,它返回所需的服务。
但我不确定这是否应该被称为服务,服务是远程可调用的对象。
顺便说一句,基于用户获取userEntity看起来很奇怪。用户不是实体吗?