2008-12-30 63 views
0

有一个接口抽象基类的设计问题?

class abc { 

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

} 

class concrete1: public abc { 

public: 
int foo() { 

.. 
} 


class concrete2 : public abc { 

public: 
int foo() { 

.. 
} 


} 

现在我的主要节目,我需要构建基于可变

abc *a; 
if (var == 1) 
    a = new concrete1(); 
else 
    a = new concrete2(); 

值类很显然,我不希望在节目中这两条线无处不在(请注意我在这里已经简化了,所以事情很清楚)。如果有什么设计模式,我应该使用哪种设计模式?

+0

不要忘记你在基类中的纯虚拟析构函数。也 ';'应该是在类定义的关闭'}'之后。 – 2008-12-30 08:03:26

回答

2

首先,你应该使用一个工厂或工厂方法litb提到。

但除此之外,我建议您使用枚举或至少符号常量来确定实例化哪个类。这是更容易阅读,它允许您构建意外值的保护措施。