OrExpression
的示例:public class OrExpression extends Expression{
private Expression expression1 = null;
private Expression expression2 = null;
public OrExpression(Expression expression1, Expression expression2) {
this.expression1 = expression1;
this.expression2 = expression2;
}
public boolean interpret(String str) {
return expression1.interpret(str) || expression2.interpret(str);
}
}
OrExpression
由两个其他表达式构成,并且每个表达式的结果传递给布尔or
函数。因此,对于你的第一个问题,简单地说是 - 不。
更新: 我找到了一些对你有用的信息。
结构模式用于定义系统的静态属性(请参见类图)。
例如:可以使用工厂模式来创建组成系统的实体。您可以拥有具有在 Windows 上与在 OS X 上不同图形属性的 Button 对象。工厂模式将创建 Button,而不考虑操作系统,所创建的对象将在两个操作系统上公开相同的接口,尽管具有不同的内部实现。
行为模式用于定义系统的动态行为(请参见活动、序列等图表)。
示例:适配器模式可以在运行时使用,以透明地允许两个实体之间的接口,它们之间没有共享接口。它有效地改变了对象在运行时的行为。我同意其他答案。
此外,它们是完全不同的模式。就我从课堂上记得的而言;
组合; 我们使用这种模式来生成分层
元素。例如家谱,有父母和子女元素,但每个人都有不同的属性
,尽管他们都是人(基本)属性,但我们关注的是他们在这种模式下如何相互关联。
解释器:将此模式视为一种编译器
。假设您正在实现一个规则引擎,并且您使用语言元素(符号)以不同的方式评估某些内容。例如正则表达式
。
string item="1500$-240&DSCNT=";
var out = item.Evaluate(); //output : 1500$-240$ = 1260$
We applied $240 discount by this text expression
Gamma等人花了一些篇幅来比较这两种模式。在讨论解释器模式时,他们说了一件事:
您不必在表达式类中定义Interpret操作。如果创建新的解释器很常见,则最好使用访问者模式将Interpret放入单独的“访问者”对象中。
因此,我从中得出的结论是,组合模式为您提供了实现解释器模式的一种方法,但还有其他方法,包括访问者模式。
我认为它们之间存在显着的重叠。Gamma等人为组合模式提供的示例包含解释器模式的示例,而他们为解释器模式提供的示例也是组合模式的示例。