![]() |
1
1
基本上,您希望在getProductionTime中去掉那个大的if/switch语句,并将每种情况转换为各种更小、更合理的类。每个类都是不同的策略,使用不同的条件调用calculationfast或calculationslow。 例如,如果您的语言支持内部类(Java),并且plantype只需要检查产品的状态就可以在“快”和“慢”之间做出选择:
基本上,您的算法可以选择在给定点上有意义的plantype类型,并将其传递给getproductiontime。 内部类的方法可能是完全错误的,这取决于plantype类需要检查什么,但是您得到了图片。 |
![]() |
2
0
这是有可能做到的战略模式。我建议您执行以下操作: 在Product类中创建一个接口来计算生产时间。 然后实现一个策略类ProdTimeCalculationStrategyBase,它将具有虚拟的GetProductTime方法并从中继承所有其他策略类。在每种策略中,你都可以实现它自己的计算方法。 在那之后实施一个特殊的工厂,在那里你的开关将移动。这个工厂将根据你提供给它的产品创建一个策略计算类的实例。 之后,您的代码将按如下方式运行:当要求产品计算ProductionTime时,它将向工厂提供所有详细信息,以创建一个特殊的计算策略。工厂将返回能够以正确方式计算的对象。策略返回的结果将被提供给产品,并返回给调用方。 |
|
3
0
如果策略模式消除了代码重复,您只想使用它。要删除的副本在哪里?如果是条件语句,策略模式只会增加复杂度而不修复问题。 |
![]() |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
![]() |
cobby · 在战略模式中使用工厂模式? 3 年前 |
![]() |
Nobody · Java中带while循环的三角形模式 3 年前 |
![]() |
Eduard Stefanescu · 如何在层之间传输异常? 7 年前 |
![]() |
D. Schreier Talha Noyon · 对于目录中的每个类 7 年前 |
![]() |
Tanvi Jaywant · 如何重载类 7 年前 |