2015-04-17 45 views
0

我想根據角色值,獲得相關的服務,如如何通過模式獲得價值服務?

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,我必須修改代碼,這違反了開放關閉。

那麼我該如何解決擴展問題?

感謝您提前給予的所有幫助和建議。

+1

看起來像使用工廠模式的經典案例。看看[工廠模式](http://alvinalexander.com/java/java-factory-pattern-example) – Phoenix

+0

編寫一個「UserDealServiceFactory」..並自動裝入! ;) – xerx593

回答

0

正如評論中已經提到的那樣,你需要一個工廠,但是工廠很少。

工廠 - 在不向客戶端公開實例化邏輯的情況下創建對象,並通過公共接口引用新創建的對象。工廠方法的簡化版本

工廠方法 - 定義用於創建對象的接口,但讓子類決定實例化哪個類,並通過通用接口引用新創建的對象。

抽象工廠 - 提供創建相關對象族的界面,而不顯式指定其類。

我會考慮工廠方法,這樣你的「用戶」對象將有方法「user.createUserDealService()」,它返回所需的服務。

但我不確定這是否應該被稱爲服務,服務是遠程可調用的對象。

順便說一句,看起來很奇怪獲取基於用戶的userEntity。用戶不是一個實體嗎?

+0

用戶是一個實體 –

+0

那麼爲什麼你這樣做'UserEntity userEntity = userDealService.getUserEntity(user);'? –

+0

由於用戶實體需要兩個表列來構建 –