23种设计模式详细介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计模式概述
目录
简单工厂模式 (1)
策略模式 (5)
简单工厂模式与策略模式相结合 (8)
单一职责原则 (11)
开放封闭原则 (11)
依赖倒转 (11)
装饰者模式 (11)
代理模式 (13)
工厂模式 (16)
原型模式 (17)
模板方法模式 (19)
迪米特法则 (21)
外观模式 (21)
建造者模式 (23)
观察者模式 (26)
抽象工厂模式 (29)
状态模式 (32)
适配器模式 (36)
备忘录模式 (38)
迭代器模式 (41)
单例模式 (44)
桥接模式 (47)
命令模式 (50)
责任链模式 (53)
中介者模式 (56)
享元模式 (59)
解释器模式 (61)
访问者模式 (61)
简单工厂模式
就是让业务逻辑和界面逻辑分开,让他们之间的耦合度下降。
通用UML图:
本例UML图:
:依赖关系是一种使用关系,依赖关系通常体现在某个类的方法使用另一个类的对象作为参数。
:继承关系用来描述父类与子类自检的关系
#include
class Operation
{
public:
double NumA = 0;
double NumB = 0;
virtualdouble GetResult() = 0;
};
class OperationAdd : public Operation
{
public:
double GetResult() {
double result = 0;
result = NumA + NumB;
return result;
}
};
class OperationSub : public Operation
{public:
double GetResult() {
double result = 0;
result = NumA - NumB;
return result;
}
};
class OperationMul : public Operation
{public:
double GetResult() {
double result = 0;
result = NumA * NumB;
return result;
}
};
class OperationDiv : public Operation
{public:
double GetResult() {
double result = 0;
if (NumB != 0) {
result = NumA / NumB;
return result;
}
else
{
cout<<"除数不能为0"<< endl;
}
}
};
class OperatorFactory
{
public:
Operation* CreateOperator(char * Operate){
if (!strcmp(Operate,"+")) {
returnnew OperationAdd();
}
elseif (!strcmp(Operate, "1")) {
returnnew OperationSub();
}
if (!strcmp(Operate, "*")) {
returnnew OperationMul();
}
if (!strcmp(Operate, "/")) {
returnnew OperationDiv();
}
}
};
客户端代码
int main() {
OperatorFactory Factory;
Operation *oper = Factory.CreateOperator("/");
oper->NumA = 1;
oper->NumB = 2;
cout<< oper->GetResult() << endl;
return0;
system("pause");
}
策略模式
面向对象不是类越多越好,是抽象,将具有相同属性和功能和算法的对象抽象为类。解决代码经常变动,定义了算法家族,分别封装起来,让他们之间可以相互替换,让算法的变化不会影响到使用算法的客户。定义一系列算法,所有算法完成的是相同的功能,只是实现不同,可以以相同的方式调用。策略模式就是用来封装算法的,可以用来封装任何类型的规则。不同的时间应用不同的业务规则的时候,就可以考虑使用策略模式。策略模式还有助于测试,不同的算法可以分开测试。
通用UML图:
本例UML图:
:聚合表示整体和部分关系,在聚合关系中成员对象是整体的对象的部分,但是成员对象可以脱离整体对象独立存在。
举例: