我正在开发一种类似于铁路票务的解决方案。
背景:提供了来自泰米尔纳德邦的18个火车站。乘客需要一张票。对于最多5站的旅程,票价是10卢比。在5个车站之后,每5个车站将收取5卢比的额外费用。对于完整的拉伸旅程,即从第1站到最后一站,票价是卢比。 20。
e.g。
def myMethod(self, parameter1, parameter2):
#do stuff
将来可以增加更多关于票价计算的商业规则。
问题是,哪些设计模式在票价计算中是正确的选择?
答案 0 :(得分:5)
策略模式也适合您的要求。您可以为5,10,20站票价定义多个策略类。根据站点数量,您可以加载相应的策略。您可以使用工厂方法首先创建票价对象。 策略+工厂方法+构建器组合适合您。
BaseFareRule,AgeRule,StationsRule,DistanceRule,FestivalRule 是核心策略(接口)
这些策略中的每一个都将具体实现。获得FiveStation
或TenStation
策略等特定策略时,会使用 FactoryMethod 模式。即使您可以拥有多个FiveStation策略,也可以通过规则配置动态更改实施。策略最适合此类要求。
FareRuleBuilder是一个构建器类,具有许多使用 Composition 模式配置的规则。
无论装饰者或策略如何,规则都是接口。建造者&两种解决方案都需要FactoryMethod 。
您可以在解决方案中使用装饰器或Stretegy (问题可以有多个解决方案)但我更喜欢策略,它是票价计算的核心组件
答案 1 :(得分:1)
您拥有默认的Price类及其Price接口,然后您创建继承自Price接口的装饰器接口。所有组合都是装饰器接口的子类。
答案 2 :(得分:1)
战略模式将在这种情况下发挥作用。所以,你有一个策略,比如根据你决定的停止计数,应该支付多少票价。如果稍后你的战略改变就像我们需要根据距离计算票价一样,你很容易改变战略。
如果您想在计算的票价之上添加服务税,请装饰它。
所以,我建议使用策略和装饰器模式。