如何为相同类型的对象提供不同的设置配置?

时间:2018-01-11 17:35:08

标签: c++ design-patterns software-design

为简单起见,我说有一个对象管理器class A来管理从同一个类class B派生的对象之间的资源。

A要求是这些:

1)一次只能有一个B的实例,我们会current B

2)应该记住上一个B的名称或枚举表示,以便在B再次需要current B时重新创建。

3)A有资源abcd

4)A负责仅为current B current B提供current B所需的资源{/ 1}}

目前的实施是这样的。我希望有一个更好的方法,因为所有的static_cast都让我烦恼。

class B
{
 public:
   void show()
 }

class Recording : public B
{
}

class Camera : public B
{
} 

class A
{
 a a;
 b b;
 c c;
 d d;

 enum Benum
  {
    Recording,
    Camera,
    InputSource,
    COUNT,
  }
 map<Benum, unique_ptr<B> Bmap;
 B* currentB;
public:

  void init()
  { 
    Bmap[Benum::Recording] = make_uniqe ...
    Bmap[Benum::Camera] = make_uniqe ...
    ...
  }

  switchB(Benum b)
  {
  switch(b)
  {
  case Benum::REcording
    auto recording = static_cast<Recording>(Bmap[Benum::Recording].get());
    recording->setup(a, b, c)
    currentB = recording;
  case Benum::Camera
    auto camera = static_cast<CAmera>(Bmap[Benum::Camera].get());
    camera->setup(b, c)
    currentB = camera;

  currentB->show();

这很好,但仅仅是为了工程挑战,还有更好的方法吗?对我而言,这似乎是一种代码味道。阅读本文,我必须明白枚举代表了对象。如果enum改变了整个班级就必须被触及。它似乎不容易维护。

此外,所有这些static_casting和类似的代码在switch语句中只有不同的设置似乎是代码气味

0 个答案:

没有答案
相关问题