gpt4 book ai didi

ruby-on-rails - 关于策略模式和 Rails

转载 作者:数据小太阳 更新时间:2023-10-29 08:28:16 24 4
gpt4 key购买 nike

我想在我的应用程序中加入策略模式

我在 lib 下存储了以下类。

class Network
def search
raise "NO"
end

def w_read
raise "NO"
end
#...
end

class FacebookClass < Network
def search
# FacebookClass specific...
end

def w_read
raise OneError.new("...")
end
end

class TwitterClass < Network
def search
# TwitterClass specific...
end

def w_read
# TwitterClass specific...
end

def write
# TwitterClass specific...
end
end

现在我想从app/model/network_searcher.rb 调用TwitterClass 的方法search。我怎样才能做到这一点?我在这里成功实现了策略模式吗?

最佳答案

Wikipedia 中的示例为例, 我认为你的 app/model/network_searcher 应该是这样的

class NetworkSearcher
def initialize(search_class)
@search_class = search_class
end

def search_social
@search_class.search
end

def w_read_social
@search_class.w_read
end

def write_social
@search_class.write
end
end

然后在controller中或者你想调用它的地方,你可以这样调用:

search_class = TwitterClass.new # or FacebookClass.new
network_searcher = NetworkSearch.new(search_class)
network_searcher.search_social # or network_searcher.w_read_social or network_searcher.write_social

此外,如果您将这些类保存在 lib 中,对于 Rails 3,为了自动加载这些类,您需要将此行添加到 config/application.rb

config.autoload_paths += %W(#{config.root}/lib)

并遵循 Rails 中文件名的命名约定(例如 TwitterClass 应命名为 twitter_class.rb)。否则,无论您在何处使用这些类,都必须需要这些文件。

关于ruby-on-rails - 关于策略模式和 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12508414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com