QQ群:①群:1053842
735
、②群:10
74011106
HI,小伙伴你好~
我们在维护者全网最大的计算机相关编程书籍分享仓库,目前已有超过 1000本 的计算机经典书籍了。
其中涉及C/C++、Java、Python、Go语言等各种编程语言,还有数据结构与算法、操作系统、后端架
构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经等~
只有你想不到,没有我们没分享到的计算机学习书籍,如果真的有我们没能分享到的书籍或者是你所需
要的,欢迎添加下方联系方式来告诉我们,期待你的到来。
在此承诺本仓库永不收费,永远免费分享给有需要的人,希望自己的幸苦结晶能够帮助到曾经那些像我
一样的小白、新手、在校生们,为那些曾经像我一样迷茫的人指明一条路。
本仓库无偿分享各种计算机书籍、各种专业PDF资料以及个人笔记资料等,所有权归仓库作者(公
众号【
C语言与CPP编程
】)所有,如有疑问提请issue或者联系本人
565755758@qq.com
,感谢~
公众号「C语言与CPP编程」
内容涵盖 C语言、C++、Linux、
Qt、数据结构、算法、计算机网络、
操作系统等方面,同时也分享学习
路线、面试、项目实战。
公众号[程序员编程指南],
干货日更,欢迎关注
加个人微信。备注加群,进微信学习交流
(一)简单工厂模式.......................................................................................................................2
(二)策略模式...............................................................................................................................4
策略与工厂结合.......................................................................................................................6
单一职责原则...........................................................................................................................6
开放――封闭原则...................................................................................................................6
里氏代换原则...........................................................................................................................7
依赖倒转原则...........................................................................................................................7
(三)装饰模式...............................................................................................................................7
(四)代理模式...............................................................................................................................9
(五)工厂方法模式.....................................................................................................................11
(六)原型模式.............................................................................................................................13
(七)模板方法模式.....................................................................................................................15
迪米特法则 ............................................................................................................................16
(八)外观模式.............................................................................................................................16
(九)建造者模式(生成器模式).............................................................................................19
(十)观察者模式.........................................................................................................................23
(十一)抽象工厂模式.................................................................................................................28
(十二)状态模式.........................................................................................................................32
(十三)适配器模式.....................................................................................................................34
(十四)备忘录模式.....................................................................................................................37
(十五)组合模式.........................................................................................................................39
(十六)迭代器模式.....................................................................................................................45
(十七)单例模式.........................................................................................................................46
(十八)桥接模式.........................................................................................................................47
(十九)命令模式.........................................................................................................................49
(二十)责任链模式.....................................................................................................................52
(二十一)中介者模式.................................................................................................................54
(二十二)享元模式.....................................................................................................................56
(二十三)解释器模式.................................................................................................................59
(二十四)访问者模式.................................................................................................................61
(一)简单工厂模式
主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来
根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
GOOD:适用于不同情况创建不同的类时
BUG:客户端必须要知道基类和工厂类,耦合性差
(工厂类与基类为关联关系)
例:
//基类
classCOperation
{
public:
intm_nFirst;
intm_nSecond;
virtualdoubleGetResult()
{
doubledResult=0;
returndResult;
}
};
//加法
classAddOperation:publicCOperation
{
public:
virtualdoubleGetResult()
{
returnm_nFirst+m_nSecond;
}
};
//减法
classSubOperation:publicCOperation
{
public:
virtualdoubleGetResult()
{
returnm_nFirstm_nSecond;
}
};
//工厂类
classCCalculatorFactory
{
public:
staticCOperation*Create(charcOperator);
};
COperation*CCalculatorFactory::Create(charcOperator)
{
COperation*oper;
//在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI??
switch(cOperator)
{
case'+':
oper=newAddOperation();
break;
case'':
oper=newSubOperation();
break;
default:
oper=newAddOperation();
break;
}
returnoper;
}
客户端
intmain()
{
inta,b;
cin>>a>>b;
COperation*op=CCalculatorFactory::Create('');
op>m_nFirst=a;
op>m_nSecond=b;
cout<<op>GetResult()<<endl;
return0;
}
(二)策略模式
定义算法家族,分别封装起来,让它们之间可以互相替换,让算法变化,不会影响
到用户
GOOD:适合类中的成员以方法为主,算法经常变动;简化了单元测试(因为每个
算法都有自己的类,可以通过自己的接口单独测试。
策略模式和简单工厂基本相同,但简单工厂模式只能解决对象创建问题,对于经常
变动的算法应使用策略模式。
BUG:客户端要做出判断
例
//策略基类
classCOperation
{
public:
intm_nFirst;
intm_nSecond;
virtualdoubleGetResult()
{
doubledResult=0;
returndResult;
}
};
//策略具体类—加法类
classAddOperation:publicCOperation
{