这两种模式之间有什么区别,而不是意图,因为很明显它们解决了不同的问题,但在实施方面。
你能说,例如,解释器是一个退化的复合词吗?
你还能说些什么呢?
答案 0 :(得分:6)
解释器模式与复合模式关系不大。您可以使用复合实现解释器的一部分 - 例如,here给出一个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
函数。 / p>
一般来说,这只是一个可能的解释器的一小部分 - 它更像是一个高级概念,而不是一个简单的复合,只用于非常小的领域(需要解释任意字符串,可能然后执行命令或代表一组规则)
答案 1 :(得分:2)
首先,解释器是行为模式,复合是结构。它本身就说明了你应该如何考虑使用它们。基本上,结构设计模式处理实体之间的关系,使这些实体更容易协同工作。另一方面,行为设计模式用于实体之间的通信,使这些实体更容易,更灵活地进行通信。
所以你的第一个问题的答案只是说 - 没有。
<强> 更新 强> 我找到了可以useful to you here的信息。
结构模式用于定义系统的静态属性(请参阅类图)。
示例:工厂模式可用于创建构成系统的实体。您可以在Windows与OS X上拥有具有不同图形属性的对象按钮。无论操作系统如何,工厂模式都将创建按钮,并且创建的对象将在两个操作系统上具有相同的接口,尽管具有不同的内部结构,但仍会显示相同的行为。
行为模式用于定义系统的动态行为(参见活动,序列等图表)。
示例:可以在运行时使用适配器模式透明地允许两个不共享它们之间接口的实体的接口。它在运行时有效地改变了对象的行为。
答案 2 :(得分:0)
我同意其他答案。
此外,它们是完全不同的模式。据我记得在班上;
组合;我们使用此模式生成 hierarchical
元素。如家谱,有父元素和子元素,但每个人都有不同的attributes
,因为它们是人(基础)属性,但我们关注的是它们在这种模式中如何相互关联。
口译员:将此模式视为一种 compiler
。假设您正在实现规则引擎,并以不同的方式使用语言元素(符号)评估某些内容。例如 regular expressions
。
string item="1500$-240&DSCNT=";
var out = item.Evaluate(); //output : 1500$-240$ = 1260$
We applied $240 discount by this text expression
答案 3 :(得分:0)
Gamma等。投入一些空间比较这两种模式。他们在讨论口译员模式时所说的话
您不必在表达式类中定义Interpret操作。如果通常创建一个新的解释器,那么最好使用Visitor模式将Interpret放在一个单独的“ visitor”对象中。
所以我从中得到的是Composite模式为您提供了一种实现Interpreter模式的方法,但是还有其他方法,包括Visitor模式。
我认为有很多重叠之处。伽玛等人的例子。提供给Composite模式的示例包含解释器模式的示例,提供给Interpreter模式的示例也是Composite模式的示例。