3

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

背景:给出了来自泰米尔纳德邦的 18 个火车站。乘客需要一张票。对于最多 5 个车站的旅程,票价为 10 卢比。5站后,每5站,将收取5卢比的额外费用。对于完整的旅程,即从第一站到最后一站,票价为卢比。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

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

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

4

3 回答 3

6

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

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

  2. 这些策略中的每一个都会有具体的实施。获取特定策略FiveStationTenStation策略使用FactoryMethod模式。甚至您可以拥有多个 FiveStation 策略,并且可以通过规则配置动态更改实现。策略最适合这种类型的需求。

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

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

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

于 2015-08-12T08:24:50.687 回答
1

我推荐你装饰器模式

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

于 2015-08-12T08:09:20.877 回答
1

策略模式将适用于这种情况。因此,您有一种策略,例如根据您决定的停靠次数,票价应该是多少。如果稍后您的策略发生变化,例如我们需要根据距离计算票价,您可以轻松更改策略。

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

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

于 2015-08-12T08:46:49.580 回答