[英]Design Consultation : Calling methods from multiple classes
我正在解決一個問題,我將以以下形式從用戶那里得到輸入。
{
"serviceA":true,
"serviceB":true,
"serviceC":false,
"serviceD":true,
"serviceE":false,
"score":10
}
根據用戶的選擇,我需要致電服務以收集分數。此服務呼叫將在一定程度上更新分數。 我已經為所有這些服務制作了軟件包。
這里的一個約束是,它們是順序的,即如果兩個都啟用,則B只能在A之后調用,否則B可以直接調用。
我正在使用一個Builder文件,其中將獲得上述帶有所有服務標志的初始分數。然后,我需要以此分數調用所有服務方法。 如果我將此分數傳遞給serviceA,則服務B也需要知道服務A的分數。
使用責任鏈設計模式,我會做類似的事情
interface ServiceInterface {
public int getScore(int score);
}
class service implements ServiceInterface {
private boolean enabled;
private int factor;
private ServiceInterface nextService = null;
public serviceA(boolean enabled, int factor){
this.enabled = enabled;
this.factor = factor;
}
public void setNextService(ServiceInterface service){
this.nextService = service;
}
@Override
public int getScore(int score) {
if (this.enabled)
score = score * this.factor;
if (nextService != null)
score = nextService.getScore(score);
return score;
}
}
一個簡單的運行示例是
int score = 10;
service a = new service(false, 4);
service b = new service(true, 3);
a.setNextService(b);
System.out.println(a.getScore(score));
輸出
30
這將定義a -> b
作為鏈,並調用getScore
,然后調用b的getScore
,這將基於enable
變量計算分數或跳過
您還可以使用繼承並將更多方法移至接口
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.