我们的客户订购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,如果这简化了工作,我不怕拉进宝石。
对我来说
,这听起来像抽象工厂。
对我来说,
这听起来像一个工厂。