//模板方法模式。完全是注意一点:软件开发过程中,如果相同的一段代码复制俩次,
//就需要对设计产生怀疑
//作者也是用了虚函数的覆盖功能。
class HummerModel {
protected:
virtual void start() {}
virtual void stop() {}
virtual void alarm() {}
virtual void engineBoom() {}
public:
//run函数虽然派生类并不一定会拥有,但是当它实现时,为了增加代码重用性,添加在基类上
virtual void run() {
this->start();
this->engineBoom();
if (this->IsAlarm()) {
this->alarm();
}
this->stop();
}
protected:
//此时当用户需要添加新模块(喇叭)时,就只要改基类就好了。
bool IsAlarm() {
return true;
}
};
class HummerH1Model : public HummerModel {
private:
//构造函数默认为true
bool m_alarmfalg;
protected:
virtual void start() {
cout << "h1 start";
}
virtual void stop() {
cout << "h1 stop";
}
virtual void alarm() {
cout << "h1 alarm";
}
virtual void engineBoom() {
cout << "h1 engineBoom";
}
bool IsAlarm() {
return m_alarmfalg;
}
public:
HummerH1Model();
void setAlarm(bool alarm) {
m_alarmfalg = alarm;
}
};
class HummerH2Model : public HummerModel {
private:
//h2的构造函数默认为false
bool m_alarmfalg;
protected:
virtual void start() {
cout << "h2 start";
}
virtual void stop() {
cout << "h2 stop";
}
virtual void alarm() {
cout << "h2 alarm";
}
virtual void engineBoom() {
cout << "h2 engineBoom";
}
bool IsAlarm() {
return m_alarmfalg;
}
public:
HummerH2Model();
void setAlarm(bool alarm) {
m_alarmfalg = alarm;
}
};
class Client {
public:
static void main() {
HummerH2Model* p2 = new HummerH2Model();
p2->run();
}
};
设计模式观后(c++还原之七 模板方法模式)
最新推荐文章于 2023-12-23 12:40:13 发布