Example 10-4. C++ Code Fragments: A Switch to Control Which Driver to Use
// C++ CODE FRAGMENT
// class ApControl
. . .
void ApControl::doDraw () {
. . .
switch (RESOLUTION) {
case LOW:
// use lrdd
case HIGH:
// use hrdd
}
}
void ApControl::doPrint () {
. . .
switch (RESOLUTION) {
case LOW:
// use lrpd
case HIGH:
// use hrpd
}
}
Example 10-5. C++ Code Fragments: Using Polymorphism to Solve the Problem
// C++ CODE FRAGMENT
// class ApControl
. . .
void ApControl::doDraw () {
. . .
myDisplayDriver->draw();
}
void ApControl::doPrint () {
. . .
myPrintDriver->print();
}
Example 10-6. C++ Code Fragments: Implementation of ResFactory
class ResFactory {
public:
virtual DisplayDriver *getDispDrvr()=0;
virtual PrintDriver *getPrtDrvr()=0;
}
class LowResFact : public ResFactory {
public:
DisplayDriver *getDispDrvr();
PrintDriver *getPrtDrvr();
}
DisplayDriver *LowResFact::getDispDrvr() {
return new LRDD;
}
PrintDriver *LowResFact::getPrtDrvr() {
return new LRPD;
}
class HighResFact : public ResFactory {
public:
DisplayDriver *getDispDrvr();
PrintDriver *getPrtDrvr();
}
DisplayDriver *HighResFact::getDispDrvr() {
return new HRDD;
}
PrintDriver *HighResFact::getPrtDrvr() {
return new HRPD;
}