设计模式——模板方法模式(C++)

来源:互联网 发布:linux i2c驱动 编辑:程序博客网 时间:2024/06/05 03:28
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:Class.h@datetime:2016.09.16@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#ifndef _CLASS_H#define _CLASS_H// 抽象类:定义算法的框架,将一些步骤延迟到子类中去。// 在不改变算法框架结构的情况下,进行代码复用class AbstractClass {public:    virtual void run();    virtual void fun1() = 0;    virtual void fun2() = 0;    virtual void fun3() = 0;};// 具体类A:实现抽象类中的方法,完成具体算法class concreteClassA : public AbstractClass {    virtual void fun1();    virtual void fun2();    virtual void fun3();};// 具体类B:实现抽象类中的方法,完成具体算法class concreteClassB : public AbstractClass {    virtual void fun1();    virtual void fun2();    virtual void fun3();};#endif // _CLASS_H
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:Class.cpp@datetime:2016.09.16@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#include "Class.h"#include <iostream>using namespace std;void AbstractClass::run() {    this->fun1();    this->fun2();    this->fun3();}void AbstractClass::fun1() {}void AbstractClass::fun2() {}void AbstractClass::fun3() {}void concreteClassA::fun1() {    cout << "吃咖啡" << endl;}void concreteClassA::fun2() {    cout << "吃中。。。" << endl;}void concreteClassA::fun3() {    cout << "吃完了" << endl;}void concreteClassB::fun1() {    cout << "逛街" << endl;}void concreteClassB::fun2() {    cout << "逛中。。。" << endl;}void concreteClassB::fun3() {    cout << "逛完了" << endl;}
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:main.cpp@datetime:2016.09.16@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#include <iostream>#include "Class.h"using namespace std;int main() {    AbstractClass* class1 = new concreteClassA();    class1->run();    AbstractClass* class2 = new concreteClassB();    class2->run();    system("pause");    return 0;}
1 0
原创粉丝点击