【发布时间】:2009-01-02 23:52:14
【问题描述】:
我有以下用例,大量代码紧密耦合在具体类型(比如 Concrete1)上。后来发现具体类型需要改,所以定义了一个接口。例如
Class ABC {
virtual int foo() = 0;
virtual int getType() = 0;
}
class Concrete1 : public ABC {
int foo() {
... }
int getType() {
return 1;
}
}
class Concrete2 : public ABC {
int foo() {
... }
int getType() {
return 2;
}
}
使用静态工厂模式来创建对象。因此,所有创建对象 new Concrete1 的地方都被替换为 ABCFactory::createType()。
现在代码中有很多地方我需要检查 createType 返回的对象是 Concrete1 还是 Concrete2 并相应地执行相关逻辑(所以代码中有很多 if else :( )。
作为此更改的一部分,我想避免代码中出现大量 if else。有什么建议?
最困扰我的是
if (abc.getType() == 1) {
...
} else if (abc.getType() ==2) {
...
}
【问题讨论】:
标签: c++