我希望有一组可互换的类来对数据集执行操作。我“想”我想做的事情叫做多态,但我不确定。
这是我正在尝试做的一个例子。我想创建一个包含初始值的对象,然后初始化另一个类以使用第一个类中的数据并使用exec执行操作,然后使用另一个递归类重复此操作。
我希望能够改变操作的顺序,这个想法是任何类都可以调用exec(),它总是返回unsigned long。 init()可能不同,但在初始化期间调用,不会在递归类中访问。
谢谢,
class operationsObject {
public:
virtual unsigned long exec (void) =0;
};
class addObject: public operationsObject {
private:
unsigned long valueA, valueB;
public:
void init(unsigned long a, unsigned long b)
{valueA = a; valueB = b;}
unsigned long exec()
{return valueA + valueB;}
};
class subtractObject: public operationsObject {
private:
operationsObject *obj;
unsigned long valueA;
public:
void init(unsigned long a, operationsObject *o)
{valueA = a; obj = o;}
unsigned long exec()
{return obj->exec() - valueA;}
};
class multiplyObject: public operationsObject {
private:
operationsObject *obj;
unsigned long valueA, valueB;
public:
void init(unsigned long a, unsigned long b, operationsObject *o)
{valueA = a; valueB = b; obj = o;}
unsigned long exec()
{return obj->exec() * valueA * valueB;}
};
int main(){
operationsObject *op1 = new addObject;
operationsObject *op2 = new subtractObject;
operationsObject *op3 = new multiplyObject;
op1->init(4,5);
op2->init(4, op1);
op3->init(1, 2, op2);
unsigned retVal = op3->exec();
}
答案 0 :(得分:3)
您的说明听起来似乎可能需要检查以下设计模式:Chain of Responsibility。
我可能会想出这样的事情:
exec
(非虚拟!)
execLocal
,用于实现您正在寻找的行为。现在,exec
可以定义为:
def exec(param):
self.execLocal(param)
if self.hasNext():
self.next.exec(param)