亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實現復合模式的遞歸函數?

實現復合模式的遞歸函數?

Qyouu 2024-01-25 21:54:44
我已經實現了帶有復合類和葉類的復合模式。復合類包含其子對象(可能是葉類型或復合類型)的 ArrayList。每個類,無論是葉類還是復合類,都有一個名為“satisfied”的布爾變量。我的復合類可以是“和”類,也可以是“或”類 - 如果它是“和”類,則它需要其所有子級都滿足才能滿足。如果它是一個“或”類,則它需要至少有一個子級滿足才能滿足。我在為復合類編寫遞歸函數“isSatisfied”來檢查其所有子級是否都滿足時遇到問題,因此它也會滿足。它是遞歸的,因為如果復合對象具有復合的子對象,它也需要檢查其所有子對象等。這是我嘗試過的(這是不正確的)。任何幫助,將不勝感激。public boolean isSatisfied(Component g) {        if (type.equals('and')) {            for (Component i : ((Composite) g).getChildren()) {                if (i instanceof Composite) { //it's a composite                    isSatisfied(i);                } else { //it's a leaf                    if (i.satisfied() == true) {                        return true;                    } else {                        return false;                    }                }            }            return false;        } else if (type.equals('or')) {            for (Component i : ((Composite) g).getChildren()) {                if (i instanceof Composite) {                    isSatsified(i);                } else {                    if (i.satisfied() == true) {                        return true;                    }                 }            }            return false;        }    }
查看完整描述

1 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

如果是組件satistifed()的屬性(模式中的根類型),則應在接口中聲明該屬性:


public interface Component {

    boolean isSatisfied();

}

然后,由于調用子組件上的方法而發生遞歸:


public boolean isSatisfied() {

    if( type.equals("and")) {

        for( Component component : components ) {

            if( !component.isSatisfied() ) {

                return false;

            }

        }

        return true;

    }

}

(如果給定component的一個循環迭代恰好是復合的,則將再次調用相同的方法,因此,遞歸)。


當我們這樣做時,還可以通過避免使用字符串作為布爾標記(其中 的部分type.equals("and"))來改進設計。如果給定的復合對象在運行時不會在 AND 類型和 OR 類型之間變化,請考慮使用單獨的AndCompositeandOrComposite類。如果出于某種原因您希望復合材料在運行時更改其行為,那么我將使用 aboolean或枚舉類型來區分它們。


查看完整回答
反對 回復 2024-01-25
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號