为了学习新技术,我想创建一个简单实用的应用程序,生成数理统计。该实用程序可以执行多种操作,假设现在有3种操作:
utility.sum(); utility.geometricMean(); utility.arithmeticMean();
用户可以请求从上面生成3个统计信息,具体取决于他在执行应用程序时指定的标志
-s -gm -am
关键是用户可以选择n个统计数据的任意组合,所以当他用 -s -am
标志,应用程序应执行 utility.sum(); utility.arithmeticMean();
方法。
我想知道,这类模块的优雅设计(可能使用的是设计模式?)应该是什么,它符合所有干净的代码、干净的设计和坚实的原则。
标志可以用最适合解决方案的方式表示-布尔、整数、枚举-这对我来说并不重要。
编辑:正如Fisherman先生所建议的,用命令实现数学运算本身是一个好主意,但是我最关心的是如何根据传递的标志创建这些命令。有没有办法避免做下面这种事?
if(flag == '-am') commands.add(new ArithmeticMeanCommand());
else if(flag == '-gm') commands.add(new GeometricMeanCommand());
else if(flag == '-s') commands.add(new CalculateSumCommand());
2条答案
按热度按时间mlnl4t2r1#
我认为你可以使用命令:https://en.wikipedia.org/wiki/command_pattern 把每一个动作放在不同的类中,比如geometricmeancommand,aritthematicMeanCommand等等。但是在你的问题中,正如我们删除答案的朋友所说,你可以使用简单的switch语句。您还可以使用facade设计模式https://en.wikipedia.org/wiki/facade_pattern 只需在主方法中共享几个方法(在内部,您将能够以不同的方式组合它们)。
wvt8vs2t2#
我认为一个简单的switch语句就可以解决这个问题。在argument中,您可以传入标志,并将casesMap到要调用的方法。