我正在开发一个项目并发现了这种模式,请参阅我在下面模拟的片段。这是常用的设计模式之一吗?这样编码有什么好处?谢谢!
注意:这里的参数可以是其他类的实例,而不仅仅是通用值。
class Foo
def self.do_something arg1, arg2
new(arg1, arg2).do_something
end
def initialize arg1, arg2
# set instance variables
@var1 = arg1
@var2 = arg2
end
def do_something
# do something...
return self
end
end
我的项目中的两个例子:
Resque的工人类
class MyWorkers
@q = 'my_queue'
def self.enqueue(arg1, arg2)
new(arg1, arg2).enqueue
end
def self.perform(arg1, arg2)
new(arg1, arg2).perform
end
def initialize(arg1, arg2)
@var1 = arg1
@var2 = arg2
end
def enqueue
Resque.enqueue(self.class, @var1, @var2)
end
def perform
# do something with @var1, @var2
end
end
运行查询并返回结果的类
class MyFinder
attr_reader :result
def self.execute(params, options={})
new(params, options).execute
end
def initiailize(params, options)
@params = params || {}
@options = options
end
def execute
# run query and set the result in instance variable
@result = SomeModel.where(params)
end
end
答案 0 :(得分:0)
这是一个Factory Method,以下是一个反映你在那里的内容的例子。可以找到here的例子,用ruby术语解释它,并深入介绍它以及其他模式。
class AdjacencyMatrix
class << self
def undirected(data)
new(data)
end
def directed(data)
new(data,true)
end
private :new
end
def initialize(data, directed=false)
#...
end
end
undirected_matrix = AdjacencyMatrix.undirected(data)
directed_matrix = AdjacencyMatrix.directed(data)