我正在寻求有关设计模式的帮助.
我非常习惯 java中的接口,我不知道如何在ruby中获得类似的机制.
它需要的是一种具有例如方法的接口.联系人.为了获得联系我需要打电话给api,这可能是google,linkedid或任何web服务.
所以我想使用一个界面,它提供了联系方式,我不想知道任何有关提供商的信息.
我非常习惯 java中的接口,我不知道如何在ruby中获得类似的机制.
它需要的是一种具有例如方法的接口.联系人.为了获得联系我需要打电话给api,这可能是google,linkedid或任何web服务.
所以我想使用一个界面,它提供了联系方式,我不想知道任何有关提供商的信息.
我的第一次尝试看起来像这样(伪代码):
Module AbstractContact def contacts #do some stuff with @data @data end end class Impl include AbstractContact def build_provider(provider) if provider == :google #get the data from google gdata= api_call @data = gdata elsif provider == :linkedin end end end c=Impl.new c.build_provider c.contacts
但我真的不确定,如果这是“ruby的方式”.
欢迎提供帮助,建议和建议.
最好,
菲尔
解决方法
战略模式可以在这里应用
def Provider def contacts raise "Abstract method called" end end class Google < Provider def contacts data = # Google API call end end class LinkedIn < Provider def contacts data = # LinkedIn API call end end class Impl def initialize(provider) case provider when :google @provider = Google.new when :linkedin @provider = LinkedIn.new else raise "Unknown provider" end end def contacts @provider.contacts end end impl = Impl.new(provider) impl.contacts