我尝试在java中使用复合设计模式。但是,我不确定我是否有效/正确地使用了它。下面的代码是否有效/正确地使用了复合设计模式?我有一个类leafgoal,它是compositegoal扩展的类。但是,他们没有实现接口,这是我在网上看到的复合模式的常见模式。这有关系吗?我没有两个类的公共接口?它仍然是一个有效的复合模式吗?
public class leafGoal {
String goalName;
//private GoalStrategy strategy;
GoalStrategy strategy;
private Dungeon dungeon;
private Inventory inventory;
public class compositeGoal extends leafGoal {
ArrayList<leafGoal> goals = new ArrayList<leafGoal>();
public compositeGoal(String goalName, GoalStrategy strategy, Dungeon dungeon, Inventory inventory) {
super(goalName, strategy, dungeon, inventory);
}
public void addGoal(leafGoal g) {
goals.add(g);
}
2条答案
按热度按时间jc3wubiy1#
组件至少需要一个基类/抽象类,复合组件至少需要一个接口。其思想是首先定义一个包含所有基本操作的通用抽象。然后您可以定义另一个接口来定义组合的行为。像这样:
注意,在
InnerNode.DoSomething()
实现您可以使用前序、中序或后序遍历,这实际上取决于您的系统(或者可以配置)。irlmq6kh2#
很难说,因为你没有真正提供任何代码。
复合不需要接口。复合对象只是一个类,它将某一类型的多个对象组合在一起,同时又是同一类型的对象。示例:您的库存中有项目,它们的行为都类似于项目。有些物品是可以装其他物品的袋子,而本身就是物品。这种袋子是复合材料的。它们包含项目,并且是项目本身。