哪种设计模式可用于铁路票价计算?

时间:2015-08-12 02:46:43

标签: oop design-patterns decorator strategy-pattern builder-pattern

我正在开发一种类似于铁路票务的解决方案。

背景:提供了来自泰米尔纳德邦的18个火车站。乘客需要一张票。对于最多5站的旅程,票价是10卢比。在5个车站之后,每5个车站将收取5卢比的额外费用。对于完整的拉伸旅程,即从第1站到最后一站,票价是卢比。 20。

e.g。

def myMethod(self, parameter1, parameter2):
    #do stuff

将来可以增加更多关于票价计算的商业规则。

问题是,哪些设计模式在票价计算中是正确的选择?

3 个答案:

答案 0 :(得分:5)

策略模式也适合您的要求。您可以为5,10,20站票价定义多个策略类。根据站点数量,您可以加载相应的策略。您可以使用工厂方法首先创建票价对象。 策略+工厂方法+构建器组合适合您。

  1. BaseFareRule,AgeRule,StationsRule,DistanceRule,FestivalRule 是核心策略(接口)

  2. 这些策略中的每一个都将具体实现。获得FiveStationTenStation策略等特定策略时,会使用 FactoryMethod 模式。即使您可以拥有多个FiveStation策略,也可以通过规则配置动态更改实施。策略最适合此类要求。

  3. FareRuleBuilder是一个构建器类,具有许多使用 Composition 模式配置的规则。

  4. 无论装饰者或策略如何,规则都是接口。建造者&两种解决方案都需要FactoryMethod

    您可以在解决方案中使用装饰器或Stretegy (问题可以有多个解决方案)但我更喜欢策略,它是票价计算的核心组件

答案 1 :(得分:1)

我建议你Decorator Pattern

您拥有默认的Price类及其Price接口,然后您创建继承自Price接口的装饰器接口。所有组合都是装饰器接口的子类。

答案 2 :(得分:1)

战略模式将在这种情况下发挥作用。所以,你有一个策略,比如根据你决定的停止计数,应该支付多少票价。如果稍后你的战略改变就像我们需要根据距离计算票价一样,你很容易改变战略。

如果您想在计算的票价之上添加服务税,请装饰它。

所以,我建议使用策略和装饰器模式。