什么是复杂决策系统的正确设计模式

时间:2010-11-12 18:27:19

标签: java architecture design-patterns

我正在设计一个调用复杂逻辑的决策系统,我可能需要使用很多嵌套的if / else语句,

我想看看是否有更好的设计模式,可以帮助我简化系统的结构,并为将来的改进提供一定的可扩展性。

项目的问题可以简化为:

我们现在需要为一个请求做出决定,该请求有三种类型的属性,可能还有更多。它们是PricePolicy(合约/整体销售/零售/折扣),RequestType(买/卖)和ProductType(时装/家居/玩具)。

每个决策都基于请求的所有3个属性,因为价格策略的类型将来可能会发生变化,并且会在决策过程中添加更多属性。

所以我试图避免制作一个大的switch语句,这对于将来的扩展来说是丑陋和困难的。如:

switch(ProductType) {
 case Fashion:
   switch(PricePolicy) {
     case Contract:
       if(Request == Buy) {
         // making a decision.
       } else {
       }
     }
   }
}

请分享您的想法和建议谢谢。

干杯, 鲍勃

3 个答案:

答案 0 :(得分:6)

也许你想要一个Rete规则引擎。试试Drools。

或数据驱动的决策表。

如果你想要一个类解决方案,请考虑多态。用Strategy或Visitor等类替换所有if / then / else案例。

关键是稳定的接口。如果你能保持稳定,并改变下面的实现,你就得到了它。

答案 1 :(得分:0)

使用n维数组,并以这种方式查找/查询/修改您的决定。

答案 2 :(得分:0)

正如ziplin建议的那样,如果每个组合都有一个决定,我会考虑一个3d数组(即不是'稀疏'的决策分布 - 我认为这是正确的术语)。这将要求您能够将决策逻辑封装在可以存储在数组中的表达式中。使用稀疏分布,可以以类似的方式使用邻接列表。