抽象基类的设计问题?

kal*_*kal 0 c++

有一个界面

class abc {

public:
virtual int foo() = 0;  
...

}

class concrete1: public abc { 

public:
int foo() { 

..
}


class concrete2 : public abc {

public:
int foo() {

..
}


}
Run Code Online (Sandbox Code Playgroud)

现在在我的主程序中,我需要根据变量的值构造类

abc *a;
if (var == 1)
   a = new concrete1();
else
   a = new concrete2();
Run Code Online (Sandbox Code Playgroud)

显然我不希望程序中到处都是这两行(请注意我已经简化了这里以便事情清楚).如果有的话,我应该使用什么设计模式?