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

Fre*_*der 3 oop design-patterns decorator strategy-pattern builder-pattern

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

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

例如

Input 1 : StationFrom - Guindy, StationTo - Kadambakkam
Output 1 : Print ticket. i.e. StationFrom : Guindy, StationTo : Kadambakkam, Total Stops : 3, Total Fare : 10

Input 2 : StationFrom - Guindy , StationTo - Chennai Fort
Output 2 : Print ticket. i.e. StationFrom : Guindy, StationTo : Chennai Fort, Total Stops : 8, Total Fare :15
Run Code Online (Sandbox Code Playgroud)

将来,可以添加更多关于票价计算的业务规则.

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

Rav*_*abu 5

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

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

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

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

无论装饰者或策略如何,规则都将是接口.两种解决方案都需要Builder和FactoryMethod.

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