Par customizable behavior
cela signifie l'implémentation fournie par différents Derived Classes
, c'est-à-dire les classes qui dériveront de votre Interface
.
Considérez ceci:
class IMachine
{
public:
int ProcessJob()
{
cout << "Processing Job in By-Default way" << endl;
}
virtual int ProcessOrder()
{
cout << "Processing Order in By-Default way" << endl;
}
};
class CMachine_A : public IMachine
{
public:
int ProcessJob()
{
cout << "Processing Job in Machine A's way" << endl;
}
int ProcessOrder()
{
cout << "Processing Order in Machine A's way" << endl;
}
};
class CMachine_B : public IMachine
{
public:
int ProcessJob()
{
cout << "Processing Job in Machine B's way" << endl;
}
int ProcessOrder()
{
cout << "Processing Order in Machine B's way" << endl;
}
};
IMachine *pMachine;
CMachine_A oMachineA;
CMachine_B oMachineB;
pMachine = &oMachineA;
pMachine->ProcessJob();
pMachine = &oMachineB;
pMachine->ProcessJob();
Output:
Processing Job in By-Default way
Processing Job in By-Default way
Ainsi, dans l'exemple ci-dessus, même si des points pMachine
à différentes implémentations concrètes (lire: classes dérivées), la sortie est la même quelle que soit la mise en œuvre choisie/classe dérivée. C'est-à-dire que le customizable behavior
de la machine A et de la machine B n'est pas entré en vigueur ou n'est pas honoré. Ainsi, en ayant non virtuelIMachine::ProcessJob()
, l'interface IMachine
a séparé/ignoré/supprimé la façon dont le travail sera traité quel que soit le type de machine (CMachine_A
ou CMachine_B
) qui est utilisé.
Maintenant, considérez ceci:
IMachine *pMachine;
CMachine_A oMachineA;
CMachine_B oMachineB;
pMachine = &oMachineA;
pMachine->ProcessOrder();
pMachine = &oMachineB;
pMachine->ProcessOrder();
Output:
Processing Order in Machine A's way
Processing Order in Machine B's way
Ici, quand pMachine
des points à différentes implémentations concrètes (lire: classes dérivées), la sortie est fonction de la mise en œuvre choisie/classe dérivée. C'est-à-dire que le customizable behavior
de la machine A et de la machine B est entré en vigueur ou honoré. Ainsi, en ayant virtuelIMachine::ProcessOrder()
, l'interface IMachine
a gardé l'option/voie ouverte dans laquelle la commande sera traitée en fonction du type de machine (CMachine_A
ou CMachine_B
) qui est utilisé.
En bref, l'interface IMachine
a gardé le ProcessOrder
comme virtual
mise en œuvre donc différente/classe dérivée peut fournir customizable behavior
pour la fonction ProcessOrder
.