如何在运行时更改对象的行为? (使用C++)
我举一个简单的例子。我有课Operator
包含一个方法operate
。让我们假设它看起来像这样:
double operate(double a, double b){
return 0.0;
}
用户将给出一些输入值a
and b
,并且会选择执行什么运算,假设他可以选择计算加法或乘法。考虑到它的输入,我所能做的就是实例化Operator
并打电话operate(a, b)
,这正是我之前提到的写法。
计算乘法或加法的方法将在某个地方实现(不知道在哪里)。
总之,我必须根据用户的输入更改 Operator 对象的行为。
标准模式是使外部类具有指向“实现”类的指针。
// derive multiple implementations from this:
class Implementation
{
virtual ~Implementation() {} // probably essential!
virtual void foo() = 0;
};
class Switcheroo
{
Implementation *impl_;
public:
// constructor, destructor, copy constructor, assignment
// must all be properly defined (any that you can't define,
// make private)
void foo()
{
impl_->foo();
}
};
通过转发所有成员函数Switcheroo
to the impl_
会员,您可以在需要时切换不同的实现。
这种模式有多种名称:Pimpl(“私有实现”的缩写)、智能引用(与智能指针相反,因为有转发成员函数),并且它与代理和桥接模式有一些共同点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)