add Template Method Pattern
parent
d12d406ed1
commit
3237803068
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
|
@ -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
|
|
@ -0,0 +1,97 @@
|
||||||
|
#ifndef __FINGERPRINTMODULE_H__
|
||||||
|
#define __FINGERPRINTMODULE_H__
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// 基类
|
||||||
|
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__
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include "FingerprintModule.h"
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
|
@ -102,3 +102,7 @@ Jungle设计模式系列
|
||||||
25.设计模式(二十五)——策略模式
|
25.设计模式(二十五)——策略模式
|
||||||
|
|
||||||
博客地址:https://blog.csdn.net/sinat_21107433/article/details/102984862
|
博客地址:https://blog.csdn.net/sinat_21107433/article/details/102984862
|
||||||
|
|
||||||
|
26.设计模式(二十六)——模板方法模式
|
||||||
|
|
||||||
|
博客地址:https://blog.csdn.net/sinat_21107433/article/details/102994585
|
Loading…
Reference in New Issue