我正在阅读有关Factory Method Pattern的内容,即使在阅读examples和questions后,我仍然无法理解如何在实际案例中使用它。
例如,假设有两种方法可以将数据输入我的类,即用户输入可以是:
姓名姓氏
姓氏,姓名
我会或多或少地解决这个问题:
class Name
attr_accessor :name
attr_accessor :surname
def initialize(rawname)
if(rawname.include? ',')
@name = rawname.split(', ').last
@surname = rawname.split(', ').first
else
@name = rawname.split(' ').first
@surname = rawname.split(' ').last
end
end
def print
puts "#{@name} #{@surname}"
end
end
我应该如何在这个例子中实现Factory方法?或者一般来说,我的流程应该如何才能使用这种设计模式?
答案 0 :(得分:4)
你不应该。
在基于类的编程中,工厂方法模式是一种创建模式,它使用工厂方法来处理创建对象的问题,而无需指定将要创建的对象的确切类。
如果你有Name
的专门子类,那么可能。
你的第一个想法应该是"这种模式在这里有意义吗?我是否足够理解这种模式,试图在这里应用它?"。如果答案是"是"和"是",然后你只需应用它。
您最有可能意味着在这里使用的是Factory pattern。
在基于类的编程中,工厂是类
的构造函数的抽象
class NameFactory
def self.create(str)
# break str here
Name.new(first_name, last_name)
end
end
# then
@user.name = NameFactory.create(params[:user_name])
在这个具体的例子中,在现实生活中,我不会使用任何工厂的东西。这只是无根据的并发症。但如果我有一个更复杂的课程(比如Transaction
),那么我会采用某种创作模式,是的。大多数情况下,它只是Builder
。
答案 1 :(得分:1)
这不是最优的,但您可以先将原始名称规范化。
class Name
attr_accessor :name, :surname
def initialize(rawname)
@name, @surname = rawname.split(", ").rotate.join(" ").split
end
end