实现部分有时候是不会有太大变动的,但还是用虚函数,效率上不高。可用模板将实现部分参数化。
public:
void operation() { doOperation(); }
protected:
virtual void doOperation() = 0;
private:
};
class ConcretImplA {
public:
virtual void opimp() { cout << "ImplA" << endl; }
};
class ConcretImplB {
public:
virtual void opimp() { cout << "ImplB" << endl; }
};
template <class T>
class Refined: public Abstraction {
public:
Refined(T* imp): imp_(imp) {}
virtual void doOperation() { imp_->opimp(); }
private:
T* imp_;
};
int main() {
ConcretImplB implb;
ConcretImplA impla;
Abstraction* absa = new Refined<ConcretImplA>(&impla);
Abstraction* absb = new Refined<ConcretImplB>(&implb);
absa->operation();
absb->operation();
getchar();
}