-
Notifications
You must be signed in to change notification settings - Fork 2
/
Linary_Strategy.h
150 lines (124 loc) · 2.72 KB
/
Linary_Strategy.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*****************************************************************/
/* 设计模式————策略模式
/* 作者:李凝瑞
/* 时间:2015.06.07
/*****************************************************************/
/** 策略模式:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换。
* 策略模式让算法独立于使用它的客户端而变化,是一种对象行为型模式。
*/
#pragma once
#include "stdafx.h"
namespace dp_strategy {
// 抽象策略类
class Strategy {
public:
// 算法
virtual void Algorithm() = 0;
};
// 具体算法A
class ConcreteStrategyA : public Strategy {
public:
virtual void Algorithm() {}
};
// 具体算法B
class ConcreteStrategyB : public Strategy {
public:
virtual void Algorithm() {}
};
// 环境类
class Context {
public:
void Algorithm() {
return strategy->Algorithm();
}
private:
Strategy * strategy;
};
};
namespace linary_strategy {
// 训练模型:抽象策略类
class TrainModel {
public:
// 抽象训练算法
virtual void Train() = 0;
};
// RBM模型:具体策略
class RBM : public TrainModel {
public:
virtual void Train() {
std::cout << "用RBM模型训练" << std::endl;
}
};
// CNN模型:具体策略
class CNN : public TrainModel {
public:
virtual void Train() {
std::cout << "用CNN模型训练" << std::endl;
}
};
// 分类模型:抽象策略类
class ClassifyModel {
public:
// 抽象分类算法
virtual void Classify() = 0;
};
// SVM模型:具体策略
class SVM : public ClassifyModel {
public:
virtual void Classify() {
std::cout << "用SVM模型分类" << std::endl;
}
};
// KMeans模型:具体策略
class KMeans : public ClassifyModel {
public:
virtual void Classify() {
std::cout << "用KMeans模型分类" << std::endl;
}
};
// 深度学习算法类:环境类
class DeepLearning {
public:
// 构造与析构
DeepLearning() {}
~DeepLearning() {
delete classifyModel;
delete trainModel;
}
void SetTrainModel(TrainModel * trainModel) {
this->trainModel = trainModel;
}
void SetClassifyModel(ClassifyModel * classifyModel) {
this->classifyModel = classifyModel;
}
// 这是模板方法模式的应用
void Run() {
std::cout << "开始执行深度学习..." << std::endl;
Train();
Classify();
}
// 调用模型类的算法
void Train() {
trainModel->Train();
}
void Classify() {
classifyModel->Classify();
}
private:
// ... 预处理
TrainModel * trainModel;
ClassifyModel * classifyModel;
// ... 后处理
};
// 测试代码
static void Test_Strategy() {
std::cout << "--------------------------" << std::endl;
std::cout << "-- 策略模式测试 --" << std::endl;
std::cout << "--------------------------" << std::endl;
DeepLearning deepLearning;
deepLearning.SetTrainModel(new RBM());
deepLearning.SetClassifyModel(new SVM());
deepLearning.Run();
std::cout << std::endl;
}
};