如何根据模式获得服务?

时间:2015-04-17 04:32:52

标签: java design-patterns refactoring factory-pattern

我想根据角色值来获得相关服务,比如

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。

那么如何解决扩展问题?

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

1 个答案:

答案 0 :(得分:0)

正如评论中已经提到的那样,你需要一个工厂,但工厂很少。

  

Factory - 创建对象而不将实例化逻辑暴露给客户端,并通过公共接口引用新创建的对象。是Factory Method

的简化版本      

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

     

Abstract Factory - 提供用于创建相关对象族的界面,而无需明确指定其类。

我会考虑工厂方法,那样你的“用户”对象将有方法“user.createUserDealService()”,它返回所需的服务。

但我不确定这是否应该被称为服务,服务是远程可调用的对象。

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