65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Builder 设计模式实现多语言交互

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.50/5 (3投票s)

2007 年 8 月 22 日

CPOL

2分钟阅读

viewsIcon

28733

downloadIcon

304

描述了说明如何用英语和土耳其语构建简单句子的 C++ 代码。

引言

使用构建者模式的软件代码示例数不胜数,这个术语源自GoF书籍[Gamma, et al.]。 这是一种创建型模式,其目的是“将复杂对象的构建与其表示分离,以便相同的构建过程可以创建不同的表示”。 对于人类来说,没有比自然语言更复杂的了,尤其是陌生的语言。 在本文中,我希望演示一个简单的计算机程序如何向它的美国和土耳其朋友问好。

为了做到这一点,高级代码必须简单明了,就像一个双语者可以用两种不同的语言问好,而无需考虑语言本身的细节一样。

Using the Code

与美国朋友交谈的代码可能如下所示

AmericanHelloBuilder americanHelloBuilder;
speaker.SetHelloBuilder(&americanHelloBuilder);
speaker.ConstructHello()->getHello()->ShowHello();

与土耳其朋友交谈的代码可能如下所示

TurkishHelloBuilder turkishHelloBuilder;
speaker.SetHelloBuilder (&turkishHelloBuilder);
speaker.ConstructHello()->getHello()->ShowHello();

尽管数据类型或表示形式存在差异,但相同的构建过程用于显示结果。

有一个说话者和两种不同的语言。 说话者能够用这些语言构建句子。 这就是系统中这两个实体关联的方式。

如果我们深入研究这段代码,我们会看到构建者模式的内部工作原理

Screenshot - BuilderDesignPattern.jpg

abstract Builder 是说话者的一部分,换句话说,说话者有能力以称为Hello产品的形式构建语言表达。 从上面的设计来看,系统可以产生两种类型的Hello 产品:AmericanHelloBuilder TurkishHelloBuilder。 这些品种或具体构建者中的每一个都必须了解产品Hello,以便可以适当地设置其属性。 在这种情况下,产品的属性是一个感叹词和一个名词。 两种语言都有这些属性,但它们的值不同。

句子属性的顺序在两种语言之间可能不同。 它必须遵循特定语言语法的规则。 在示例中,它们恰好完全匹配。

可执行输出

如果我们运行可执行文件,我们将看到用双语方式进行的正确问候。

Screenshot - Result.jpg

参考文献

  • Gamma, Erich, and et al. "Design Patterns: Elements of Reusable Object-Oriented Software"
    • Addison-Wesley Professional. 1995. 注意:这本书通常被称为“四人组”书籍 (GoF),因为有四位作者撰写了这本书。
  • http://en.wikipedia.org/wiki/Builder_pattern 于 2007 年 8 月 22 日访问,也是理解构建者设计模式的一个非常有用的资源。
© . All rights reserved.