From 73849376d62cfd3a6d1b97d844c70bbcdb301de7 Mon Sep 17 00:00:00 2001 From: liu-jianhao Date: Wed, 3 Oct 2018 11:07:58 +0800 Subject: [PATCH] template --- Template Method/Makefile | 6 +++++ Template Method/template1_app.cpp | 37 ++++++++++++++++++++++++++ Template Method/template1_lib.cpp | 24 +++++++++++++++++ Template Method/template2_app.cpp | 30 +++++++++++++++++++++ Template Method/template2_lib.cpp | 44 +++++++++++++++++++++++++++++++ 5 files changed, 141 insertions(+) create mode 100644 Template Method/Makefile create mode 100644 Template Method/template1_app.cpp create mode 100644 Template Method/template1_lib.cpp create mode 100644 Template Method/template2_app.cpp create mode 100644 Template Method/template2_lib.cpp diff --git a/Template Method/Makefile b/Template Method/Makefile new file mode 100644 index 0000000..9161336 --- /dev/null +++ b/Template Method/Makefile @@ -0,0 +1,6 @@ +all: + g++ -g -Wall -o template1 template1_lib.cpp template1_app.cpp + g++ -g -Wall -o template2 template2_lib.cpp template2_app.cpp + +clean: + rm -rf template1 template2 \ No newline at end of file diff --git a/Template Method/template1_app.cpp b/Template Method/template1_app.cpp new file mode 100644 index 0000000..1ba6525 --- /dev/null +++ b/Template Method/template1_app.cpp @@ -0,0 +1,37 @@ +#include "template1_lib.cpp" + +//应用程序开发人员 +class Application +{ + public: + bool Step2() + { + cout << "myStep2" << endl; + return true; + } + + void Step4() + { + cout << "myStep4" << endl; + } +}; + +int main() +{ + Library lib; + Application app; + + lib.Step1(); + + if (app.Step2()) + { + lib.Step3(); + } + + for (int i = 0; i < 4; i++) + { + app.Step4(); + } + + lib.Step5(); +} diff --git a/Template Method/template1_lib.cpp b/Template Method/template1_lib.cpp new file mode 100644 index 0000000..6cc9e64 --- /dev/null +++ b/Template Method/template1_lib.cpp @@ -0,0 +1,24 @@ +#include + +using namespace std; + +//程序库开发人员 +class Library +{ + +public: + void Step1() + { + cout << "Step1" << endl; + } + + void Step3() + { + cout << "Step3" << endl; + } + + void Step5() + { + cout << "Step5" << endl; + } +}; \ No newline at end of file diff --git a/Template Method/template2_app.cpp b/Template Method/template2_app.cpp new file mode 100644 index 0000000..833618b --- /dev/null +++ b/Template Method/template2_app.cpp @@ -0,0 +1,30 @@ +#include "template2_lib.cpp" +#include + +using namespace std; + +//应用程序开发人员 +class Application : public Library +{ + protected: + virtual bool Step2() + { + //... 子类重写实现 + cout << "override Step2" << endl; + return true; + } + + virtual void Step4() + { + //... 子类重写实现 + cout << "override Step4" << endl; + } +}; + +int main() +{ + Library *pLib = new Application(); + pLib->Run(); + + delete pLib; +} diff --git a/Template Method/template2_lib.cpp b/Template Method/template2_lib.cpp new file mode 100644 index 0000000..aefbbb2 --- /dev/null +++ b/Template Method/template2_lib.cpp @@ -0,0 +1,44 @@ +#include + +using namespace std; + +//程序库开发人员 +class Library +{ + public: + //稳定 template method + void Run() + { + Step1(); + + if (Step2()) + { //支持变化 ==> 虚函数的多态调用 + Step3(); + } + + for (int i = 0; i < 4; i++) + { + Step4(); //支持变化 ==> 虚函数的多态调用 + } + + Step5(); + } + virtual ~Library() {} + + protected: + void Step1() + { //稳定 + cout << "Step1" << endl; + } + void Step3() + { //稳定 + cout << "Step3" << endl; + } + void Step5() + { //稳定 + cout << "Step5" << endl; + } + + virtual bool Step2() = 0; //变化 + virtual void Step4() = 0; //变化 +}; \ No newline at end of file -- GitLab