我正在开发一种类似于铁路售票的解决方案。
背景:从泰米尔纳德邦出发,共有18个火车站。乘客需要一张票。最多行驶5个车站,车费为10卢比。在5个站点之后,每5个站点将额外收取5 Rs。对于完整的行程,即从第一站到最后一站,车费为卢比。 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
将来,可以添加有关票价计算的更多业务规则。
问题是,在票价计算中哪种设计模式是正确的选择?
最佳答案
策略模式也适合您的要求。您可以为5、10、20站票价定义多个策略类别。根据工作站数,您可以加载相应的策略。您可以使用工厂方法来首先创建票价对象。策略+工厂方法+生成器组合可为您工作。
BaseFareRule,AgeRule,StationsRule,DistanceRule,FestivalRule是核心策略(接口)
这些策略中的每一个都有具体的实现。获得诸如FiveStation
或TenStation
策略之类的特定策略时,将使用FactoryMethod模式。即使您可以有多种FiveStation策略,也可以通过规则配置动态更改实现。策略最适合此类需求。
FareRuleBuilder是一个生成器类,其中许多组合的组合规则都使用“合成”模式进行配置。
不论装饰器还是策略,规则都是接口。两种解决方案都需要Builder和FactoryMethod。
您可以在解决方案中使用Decorator或Stretegy(一个问题可以有多个解决方案),但我更喜欢Strategy,它是票价计算的核心组成部分