【问题标题】:The use of design patterns in R [closed]R中设计模式的使用[关闭]
【发布时间】:2012-03-01 15:40:08
【问题描述】:

design patterns 在编程中的使用广泛分布在许多编程语言中。一些例子是factorysingleton 设计模式。许多这些模式使用面向对象来在代码中创建抽象和封装,它们旨在使代码可重用和结构化。许多这些设计模式也可以在 R 中使用,可能是通过使用 proto 库或标准 R 面向对象?

我的问题是:

  • 我可以使用哪些基本代码(S3、S4)/包(proto、R.oo)来重现 Gamma 等人的书中提到的设计模式?
  • 是否有在 R 中实现的设计模式示例,无论是在基础 R 中还是在包中?

【问题讨论】:

  • R.oo 包在 R 中提供了类似 OOP 的功能(使用 S3 类)。它不支持全部的 OOP 特性,因此不支持全部的基于 OOP 的设计模式。我也会看看 S4 课程stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf
  • S4 类看起来很有希望,尽管与 e.g. 相比,构造对象的方式看起来有点笨拙。蟒蛇。
  • 我已经使用参考类实现了一些在“Head First Design Patterns”中勾勒出来的设计模式。它们比 S4 方法更接近于其他语言中的 OO 使用,因此涉及的翻译更少。
  • 您能发布一个指向您的工作的链接作为答案吗?或者如果它尚未在线,发布一些代码作为答案?
  • 好的,我在这里放了一个单例模式的例子:gist.github.com/1953641 这确实是一个正式的练习,对于 R 用户来说可能有点神秘。 memoise 包可以更容易地做到这一点,尽管我确实有一个用例。该结构的基本思想来自 Head First 书。

标签: oop r design-patterns


【解决方案1】:

一些设计模式的例子:

  • system.time() 函数的行为似乎很像decorator pattern。然而,在面向对象编程的上下文中几乎只提到了装饰器。但是,它仍然具有装饰器的感觉,它扩展(或装饰)现有的一段代码(在 OOP 中总是一个对象),具有额外的功能,而无需更改这段代码。这里system.time() 显示在行动中:

    system.time(bla <- Sys.sleep(1000))
    
  • @jverzani 发布了一个单例模式示例on github

  • 策略设计模式的一个例子是apply 系列函数。循环给定对象的功能是通用的,应用的功能(策略)是在用户提供功能时选择的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2010-10-11
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多