Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 这是一种设计模式吗?_Design Patterns_Identification - Fatal编程技术网

Design patterns 这是一种设计模式吗?

Design patterns 这是一种设计模式吗?,design-patterns,identification,Design Patterns,Identification,有时我通过向类传递POD(普通的旧数据)来初始化类。这减少了我必须传递给函数(无论是构造函数还是init函数)的参数数量,它允许我不关心它们的声明顺序,并且在不必更改方法签名的情况下更改参数的数量和性质 我觉得很方便 下面是一个小例子: class Manager { public: struct Configuration : mDataVectorSize( 20 ) , mShouldOutputDebug( false ) { int mDataVect

有时我通过向类传递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;

};

如果它是一个模式,那么这个模式的名称是什么?我原以为它叫Flyweight,但阅读维基百科上的描述,它与这里的内容并不完全匹配。

这称为参数对象模式,将一组方法参数封装到另一个对象/结构中。正如您在问题中已经提到的,优点之一是能够修改实际参数,而不必更改方法的签名。您可以在此处阅读更多内容:

这不是单例创建和依赖项注入吗?@MingShun Manager基于单例,但在当前上下文中不是单例。至于依赖注入,我不这么认为,因为它没有将任何行为委托给外部组件。但我以前从未将依赖注入视为将行为推入对象。到目前为止,我一直认为它是一种通过在外部初始化来将依赖项对象与对象解耦的方法。值得深思。
Manager::Configuration config;
config.mDataVectorSize = 30;

Manager manager( config );

manager.serviceA();