簡體   English   中英

設計咨詢:來自多個類的調用方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM