在Kotlin中使用策略模式拆分算法和查看部分

这是我想重构的代码:

val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { // Get Post object and use the values to update the UI requestsUsers?.clear() val match = dataSnapshot.children val keysArray = KeysHandler() if (match != null) { for (data in match) { keysArray.addToList(data.key) } if (keysArray.list.size > 0) { repeat(keysArray.list.size) { i -> val onlineMatch = dataSnapshot.child(keysArray.getElement(i)).getValue(OnlineMatch::class.java)!! onlineMatch.key = keysArray.list[i] requestsUsers.add(onlineMatch) } } } //Updating GUI updateRequests() } 

正如你所看到的,我正在下载一个名为match的数组中的数据。 然后我解析相同的数组获取键(keysArray)的数组。 然后我将keys数组的特定元素添加到另一个数组(requestsUser)。

考虑到这个算法可以改变,我想在另一个类中包含算法部分。 我在某个地方读到,在这种情况下,最好的办法是使用策略模式,但是我在kotlin工作。 我怎么能在Kotlin实施一个战略模式?

它应该类似于Java。

假设requestUsers的类型是ArrayList<RequestsUser>

创建策略界面。

 interface Strategy { fun getRequestsUsers(dataSnapshot: DataSnapshot): ArrayList<RequestsUser> } 

实现接口。

 class StrategyImpl: Strategy { override fun getRequestsUsers(dataSnapshot: DataSnapshot): ArrayList<RequestsUser> { val match = dataSnapshot.children val keysArray = KeysHandler() val requestsUsers = arrayListOf<RequestsUser>() if (match != null) { for (data in match) { keysArray.addToList(data.key) } if (keysArray.list.size > 0) { //this line can be omitted repeat(keysArray.list.size) { i -> val onlineMatch = dataSnapshot.child(keysArray.getElement(i)).getValue(OnlineMatch::class.java)!! onlineMatch.key = keysArray.list[i] requestsUsers.add(onlineMatch) } } } return requestsUsers } } 

在班上宣布这个策略

 var strategy = StrategyImpl() //make it var so that it can be changed 

最后,使用strategy来获取数据列表并添加到列表中。

 val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { // Get Post object and use the values to update the UI requestsUsers?.clear() requestsUsers?.addAll(strategy.getRequestsUsers(dataSnapshot)) //Updating GUI updateRequests() } } 
Interesting Posts