这种构造是一种设计模式吗?
Is this construction a design pattern?
有时我会通过向它传递一个 POD(普通旧数据)来初始化我的 类。这减少了我必须传递给函数的参数数量(无论是构造函数还是 init 函数),它允许我不关心它们声明的顺序,并且无需更改参数的数量和性质必须更改方法签名。
我觉得它很方便。
这是一个小例子:
class Manager
{
public:
struct Configuration
: mDataVectorSize( 20 )
, mShouldOutputDebug( false )
{
int mDataVectorSize;
bool mShouldOutputDebug;
};
Manager(const Configuration& aConfiguration);
void serviceA();
void serviceB();
private:
Configuration mConfiguration;
std::vector<int> mData;
};
与用法:
Manager::Configuration config;
config.mDataVectorSize = 30;
Manager manager( config );
manager.serviceA();
这个图案叫什么名字,如果是图案的话?我以为它叫享元,但看了维基百科上的描述,它与这里的描述不完全一致。
这称为 参数对象 模式,您将一堆方法参数封装到另一个 object/structure 中。正如您在问题中已经提到的,优点之一是能够修改实际参数而无需更改方法的签名。您可以在这里阅读更多内容:http://www.c2.com/cgi/wiki?ParameterObject
有时我会通过向它传递一个 POD(普通旧数据)来初始化我的 类。这减少了我必须传递给函数的参数数量(无论是构造函数还是 init 函数),它允许我不关心它们声明的顺序,并且无需更改参数的数量和性质必须更改方法签名。
我觉得它很方便。
这是一个小例子:
class Manager
{
public:
struct Configuration
: mDataVectorSize( 20 )
, mShouldOutputDebug( false )
{
int mDataVectorSize;
bool mShouldOutputDebug;
};
Manager(const Configuration& aConfiguration);
void serviceA();
void serviceB();
private:
Configuration mConfiguration;
std::vector<int> mData;
};
与用法:
Manager::Configuration config;
config.mDataVectorSize = 30;
Manager manager( config );
manager.serviceA();
这个图案叫什么名字,如果是图案的话?我以为它叫享元,但看了维基百科上的描述,它与这里的描述不完全一致。
这称为 参数对象 模式,您将一堆方法参数封装到另一个 object/structure 中。正如您在问题中已经提到的,优点之一是能够修改实际参数而无需更改方法的签名。您可以在这里阅读更多内容:http://www.c2.com/cgi/wiki?ParameterObject