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)代码>?因为用户实体需要两个表列来构造,所以您应该在一个位置构造用户实体,这样您的应用程序逻辑就不会了解持久性基础结构。阅读有关存储库模式的内容,它将对您有所帮助。