gpt4 book ai didi

design-patterns - 将算法封装到一个类中

转载 作者:行者123 更新时间:2023-12-04 00:57:49 25 4
gpt4 key购买 nike

我想知道将算法封装到一个类中有多常见?更具体地说,不是有许多单独的函数在彼此之间转发公共(public)参数:

void f(int common1, int param1, int *out1);
void g(int common1, int common2, int param1, int *out2)
{
f(common1, param1, ..);
}

将公共(public)参数封装到一个类中,并在构造函数中完成所有工作:
struct Algo
{
int common1;
int common2;

Algo(int common1, int common2, int param)
{ // do most of the work }

void f(int param1, int *out1);
void g(int param1, int *out2);
};

不必通过函数参数转发公共(public)参数和中间结果似乎非常实用。但我还没有看到这种“模式”被广泛使用。可能的缺点是什么?

最佳答案

这根本不是一个坏策略。事实上,如果你有能力用你的语言(你在 C++ 中这样做)定义某种类型的抽象父类(super class),它为底层功能定义了一个不透明的接口(interface),你可以在运行时交换不同的算法(想想排序算法,例如)。如果您选择的语言具有反射功能,您甚至可以拥有无​​限可扩展的代码,允许加载和使用在编写所述算法的使用者时甚至可能不存在的算法。这也允许您松散地耦合您的其他功能类和算法类,这有助于重构和在处理大型项目时保持您的理智完好无损。

当然,无论何时你开始构建一个复杂的类结构,都会有额外的架构——因此也就是代码——需要构建和维护。但是,在我看来,从长远来看,好处超过了这种轻微的不便。

最后一个建议:不要在构造函数中做你的工作。构造函数只能用于将类内部结构初始化为合理的默认值。是的,这可能包括调用其他方法来完成初始化,但初始化不是操作。这两者应该是分开的,即使它需要在您的代码中再调用一次来运行您正在寻找的特定算法。

关于design-patterns - 将算法封装到一个类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/153974/

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