1 回答

TA貢獻1830條經(jīng)驗 獲得超9個贊
如果是組件satistifed()的屬性(模式中的根類型),則應在接口中聲明該屬性:
public interface Component {
boolean isSatisfied();
}
然后,由于調用子組件上的方法而發(fā)生遞歸:
public boolean isSatisfied() {
if( type.equals("and")) {
for( Component component : components ) {
if( !component.isSatisfied() ) {
return false;
}
}
return true;
}
}
(如果給定component的一個循環(huán)迭代恰好是復合的,則將再次調用相同的方法,因此,遞歸)。
當我們這樣做時,還可以通過避免使用字符串作為布爾標記(其中 的部分type.equals("and"))來改進設計。如果給定的復合對象在運行時不會在 AND 類型和 OR 類型之間變化,請考慮使用單獨的AndCompositeandOrComposite類。如果出于某種原因您希望復合材料在運行時更改其行為,那么我將使用 aboolean或枚舉類型來區(qū)分它們。
添加回答
舉報