加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby中的界面式设计模式

发布时间:2020-12-16 19:23:51 所属栏目:百科 来源:网络整理
导读:我正在寻求有关设计模式的帮助. 我非常习惯 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读