From 3237803068366ad7215bc286118ef154681c3427 Mon Sep 17 00:00:00 2001 From: FengJungle Date: Sun, 10 Nov 2019 10:50:30 +0800 Subject: [PATCH] add Template Method Pattern --- .../1.Picture/模板方法模式UML图.png | Bin 0 -> 13151 bytes .../1.Picture/模板方法模式实例UML图.png | Bin 0 -> 17825 bytes 23.TemplateMethodPattern/2.Code/Demo.h | 41 ++++++++ .../2.Code/FingerprintModule.h | 97 ++++++++++++++++++ 23.TemplateMethodPattern/2.Code/main.cpp | 19 ++++ README.md | 6 +- 6 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 23.TemplateMethodPattern/1.Picture/模板方法模式UML图.png create mode 100644 23.TemplateMethodPattern/1.Picture/模板方法模式实例UML图.png create mode 100644 23.TemplateMethodPattern/2.Code/Demo.h create mode 100644 23.TemplateMethodPattern/2.Code/FingerprintModule.h create mode 100644 23.TemplateMethodPattern/2.Code/main.cpp diff --git a/23.TemplateMethodPattern/1.Picture/模板方法模式UML图.png b/23.TemplateMethodPattern/1.Picture/模板方法模式UML图.png new file mode 100644 index 0000000000000000000000000000000000000000..55eea9be9e81b5626b901a0ddeb4f3a1d02a0185 GIT binary patch literal 13151 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 YCUj8TtfmY6D2D36JstIeJMfVI1^Of;*#H0l literal 0 HcmV?d00001 diff --git a/23.TemplateMethodPattern/1.Picture/模板方法模式实例UML图.png b/23.TemplateMethodPattern/1.Picture/模板方法模式实例UML图.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe807018ba46bdc4b6ec230218cd07083c117a7 GIT binary patch literal 17825 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 literal 0 HcmV?d00001 diff --git a/23.TemplateMethodPattern/2.Code/Demo.h b/23.TemplateMethodPattern/2.Code/Demo.h new file mode 100644 index 0000000..83fe157 --- /dev/null +++ b/23.TemplateMethodPattern/2.Code/Demo.h @@ -0,0 +1,41 @@ +#ifndef __DEMO_H__ +#define __DEMO_H__ + +// ࣩࣨ +class AbstractClass +{ +public: + // ģ巽һ㷨Ŀ + void templateMethod(){ + // do something + method1(); + method2(); + method3(); + } + // + void mehtod1(){ + // do something + } + // 2 + virtual void method2() = 0; + // 3Ĭʵ + void mehtod3(){ + // do something + } +}; + +// ࣨ) +class ConcreteClass :public AbstractClass +{ +public: + // ʵֻ2 + void method2(){ + // do something + } + // ض3ǻķ3 + void method3(){ + // do something + } +}; + +#endif \ No newline at end of file diff --git a/23.TemplateMethodPattern/2.Code/FingerprintModule.h b/23.TemplateMethodPattern/2.Code/FingerprintModule.h new file mode 100644 index 0000000..1858827 --- /dev/null +++ b/23.TemplateMethodPattern/2.Code/FingerprintModule.h @@ -0,0 +1,97 @@ +#ifndef __FINGERPRINTMODULE_H__ +#define __FINGERPRINTMODULE_H__ + +#include + +// +class FingerprintModule +{ +public: + FingerprintModule(){} + void getImage(){ + printf("ָͼ\n"); + } + void output(){ + printf("ָͼ!\n\n"); + } + virtual bool isSafeMode() = 0; + virtual void processImage() = 0; + // ӽ + virtual void encrypt() = 0; + virtual void decrypt() = 0; + + // ģ巽 + void algorithm(){ + // 1.ͼ + getImage(); + // 2.ȫģʽ¼ܺͽ + if (isSafeMode()){ + // 2.1. + encrypt(); + // 2.2. + decrypt(); + } + // 3.Image + processImage(); + // 4. + output(); + } +}; + +// +class FingerprintModuleA :public FingerprintModule +{ +public: + FingerprintModuleA(){} + void processImage(){ + printf("ʹ һ汾㷨 ָͼ\n"); + } + bool isSafeMode(){ + printf("ȫģʽ\n"); + return true; + } + void encrypt(){ + printf("ʹRSAԿ\n"); + } + void decrypt(){ + printf("ʹRSAԿ\n"); + } +}; + +// +class FingerprintModuleB :public FingerprintModule +{ +public: + FingerprintModuleB(){} + void processImage(){ + printf("ʹ ڶ汾㷨 ָͼ\n"); + } + bool isSafeMode(){ + printf("ǰȫģʽ\n"); + return false; + } + void encrypt(){} + void decrypt(){} +}; + +// +class FingerprintModuleC :public FingerprintModule +{ +public: + FingerprintModuleC(){} + void processImage(){ + printf("ʹ һ汾㷨 ָͼ\n"); + } + bool isSafeMode(){ + printf("ȫģʽ\n"); + return true; + } + void encrypt(){ + printf("ʹDHԿ\n"); + } + void decrypt(){ + printf("ʹDHԿ\n"); + } +}; + +#endif //__FINGERPRINTMODULE_H__ \ No newline at end of file diff --git a/23.TemplateMethodPattern/2.Code/main.cpp b/23.TemplateMethodPattern/2.Code/main.cpp new file mode 100644 index 0000000..ffca5f3 --- /dev/null +++ b/23.TemplateMethodPattern/2.Code/main.cpp @@ -0,0 +1,19 @@ +#include "FingerprintModule.h" +#include + +int main() +{ + FingerprintModule *fp = new FingerprintModuleA(); + fp->algorithm(); + + fp = new FingerprintModuleB(); + fp->algorithm(); + + fp = new FingerprintModuleC(); + fp->algorithm(); + + + printf("\n\n"); + system("pause"); + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md index 1ab3adb..a213084 100644 --- a/README.md +++ b/README.md @@ -101,4 +101,8 @@ Jungle设计模式系列 25.设计模式(二十五)——策略模式 -博客地址:https://blog.csdn.net/sinat_21107433/article/details/102984862 \ No newline at end of file +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102984862 + +26.设计模式(二十六)——模板方法模式 + +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102994585 \ No newline at end of file