Foo.new( "Bar" ) 创建柱线并在那里发送消息的模式的名称是什么?



我们的客户订购Plan .计划包含业务逻辑,具体取决于他们实际订购的计划。

例如(显然现实要复杂得多,还有很多额外的差异):

  • 计划 1 创建一个站点
  • 计划 2 创建一个站点和一个数据库
  • 计划 3 在 X 类型的服务器上创建一个站点并邮寄给老板。

我考虑实现这一点的方式是:

class Order
  def initialize(plan_type)
    # for e.g. plan_type = PlanOne, create a new PlanOne
    # Details at http://stackoverflow.com/a/2811300/73673
    @plan = Object.const_get(class_name).new
  end
  def finalize
    @plan.finalize
  end
end
class Plan
 # All shared and common methods and attributes go here.
 # Might be implemented as Module "ActsAsPlan", if a Duck is more appropriate.
end
class PlanOne < Plan
  def finalize
    Site.new.create
  end
end
class PlanTwo < Plan
  def finalize
    Site.new.create
    Database.new.create
  end
end
class PlanThree < Plan
  def finalize
    server = Server.new.create
    site = Site.new.create(:server => server)
    BossMail.new(server, site).deliver
  end
end

用作:

Order.new("PlanOne").finalize
Order.new("PlanTwo").finalize 
Order.new("PlanThree").finalize

对于手头的问题来说,这是一个很好的模式吗?这将在 Rails 中实现。最多会有四五个计划,不需要扩展到数百个计划。

我正在实现的模式的名称是什么,或者更合适的模式的名称是什么?它是Ruby,如果这简化了工作,我不怕拉进宝石。

对我来说

,这听起来像抽象工厂。

对我来说,

这听起来像一个工厂。

最新更新