gpt4 book ai didi

design-patterns - 处理嵌套 if then else/嵌套 switch 语句

转载 作者:行者123 更新时间:2023-12-03 12:46:04 26 4
gpt4 key购买 nike

是否有任何设计模式/方法/方法可以删除嵌套的 if then else 条件/switch 语句?

我记得在 Google 代码博客文章中列出了 Google 人员使用的一些方法。不过现在好像找不到了

最佳答案

您想使用重构来替换使用多态类的条件。对于 example .

或者这里是另一个 example

本质上,理想的情况非常简单,您可以创建一个对象层次结构,并将各种行为移动到一个覆盖方法中。您仍然需要一种方法来创建正确的类,但这可以使用工厂模式来完成。

编辑

让我补充一点,这不是在每种情况下都完美的解决方案。正如(对不起,我忘记了你的名字)在我的评论中指出的那样,有时这可能会很痛苦,特别是如果你必须创建一个对象模型来做到这一点。如果你有这个,这个重构会很出色:

function doWork(object x)
{

if (x is a type of Apple)
{
x.Eat();

} else if (x is a type of Orange)
{
x.Peel();
x.Eat();
}

}

在这里,您可以将 switch 重构为每个水果都会处理的一些新方法。

编辑

正如有人指出你如何创建正确的类型来进入 doWork,有更多的方法可以解决这个问题,那么我可能会列出一些基本的方法。第一个也是最直接的(是的,与这个问题的本质背道而驰)是一个开关:
class FruitFactory
{
Fruit GetMeMoreFruit(typeOfFruit)
{
switch (typeOfFruit)
...
...
}
}

这种方法的好处是它易于编写,并且通常是我使用的第一种方法。虽然您仍然有一个 switch 语句,它与一个代码区域隔离并且非常基本,但它返回的是一个 n 对象。如果你只有几个对象并且它们没有改变,这很有效。

您可以查看的其他更复杂的模式是 Abstract Factory .如果您的平台支持,您还可以动态创建 Fruit。你也可以使用类似 Provider Pattern 的东西.这对我来说本质上意味着你配置你的对象,然后你有一个工厂,它基于配置和你给工厂的键动态创建正确的类。

关于design-patterns - 处理嵌套 if then else/嵌套 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/494506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com