我脑子里有这样的设计....我的目标是重复使用包含一些功能的程序,而不使用某些功能。 文献中称之为什么? 更多信息:有事件..事件导致调用function1()或function2()...
功能具有在事件发生时调用的功能。 特征可能会影响事件中调用的函数。 功能可能会影响对多个事件执行的操作。
所以它看起来可能是观察者模式+有关系...
class feature1
{
void feature1functionx();
void feature1functiony();
}
class feature2
{
void feature2functionw();
void feature2functionz();
}
class program: feature1, feature2
{
vector<string> data;
void function1()
{
feature2functionw();
}
void function2()
{
feature1functiony();
feature2functionz();
}
void execute()
{
function1();
function2();
}
}
答案 0 :(得分:7)
继承模拟IS-A
关系。
如果你想重用这些函数,那么使用HAS-A
关系似乎很自然:那就是组合。
class program
{
public:
void function1()
{
m2.feature2functionw();
}
void function2()
{
m1.feature1functiony();
m2.feature2functionz();
}
void execute()
{
this->function1();
this->function2();
}
private:
feature1 m1;
feature2 m2;
};
我知道私人继承有时被认为是一种捷径,但它并没有带来任何东西,所以更喜欢构图,因为它不会给你带来太大的影响。
编辑:添加了方法的定义,因为它显然不是那么清楚。
答案 1 :(得分:0)
这个想法对我来说似乎很奇怪和复杂。这是类层次结构中的细化和替换。
具体来说,我会寻找这样的东西:
class feature1
{
virtual void function1();
virtual void function2();
void execute() {
function1();
function2();
}
}
class feature2:public feature1 //this is your program class
{
virtual void function1()
{
feature1::function1() //call previous functionality to refine
//do feature2 stuff here
}
virtual void function2()
{
//don't call base class to replace
//do feature2 stuff here
}
}
现在feature2.Execute()做你想要的。
答案 2 :(得分:0)
您发布的代码让我想起了所谓的“模板方法”模式。理论上,这种模式看起来像这样:
class Base
{
public:
void execute()
{
function1();
function2();
}
private:
virtual void function1();
virtual void function2();
};
然后在某个班级:
class Derived1 : public Base
{
void function1()
{
//implementation here...
}
};
然后你打电话给
b->execute(); //b is of type Base* and points to an object of type Derived1
并完成你的工作。
不确定这在你的情况下是如何工作的,可能根本不存在,但至少这是一个与你描述的模式非常相似的模式的例子。
答案 3 :(得分:0)
它几乎听起来像一个接口类,但听起来你在这些基类中实现了很多代码而不是纯粹抽象,这是在C ++中创建接口的常用方法。我想如果你确定基类永远不会共享任何名称等,这可能会有效。我不知道它们是否也可以被描述为这个问题中描述的mixin类:A use for multiple inheritance?