2008-12-30 86 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提到。

但除此之外,我建議您使用枚舉或至少符號常量來確定實例化哪個類。這是更容易閱讀,它允許您構建意外值的保護措施。