- 1、本文档共83页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TOC \o 1-2 \h \z \u (一)简单工厂模式 h 2
(二)策略模式 h 4
策略与工厂结合 h 6
单一职责原则 h 6
开放――封闭原则 h 6
里氏代换原则 h 7
依赖倒转原则 h 7
(三)装饰模式 h 7
(四)代理模式 h 9
(五)工厂方法模式 h 11
(六)原型模式 h 13
(七)模板方法模式 h 15
迪米特法则 h 16
(八)外观模式 h 16
(九)建造者模式(生成器模式) h 19
(十)观察者模式 h 23
(十一)抽象工厂模式 h 28
(十二)状态模式 h 32
(十三)适配器模式 h 34
(十四)备忘录模式 h 37
(十五)组合模式 h 39
(十六)迭代器模式 h 45
(十七)单例模式 h 46
(十八)桥接模式 h 47
(十九)命令模式 h 49
(二十)责任链模式 h 52
(二十一)中介者模式 h 54
(二十二)享元模式 h 56
(二十三)解释器模式 h 59
(二十四)访问者模式 h 61
(一)简单工厂模式
主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
GOOD:适用于不同情况创建不同的类时
BUG:客户端必须要知道基类和工厂类,耦合性差
(工厂类与基类为关联关系)
例:
//基类
class COperation
{
public:
int m_nFirst;
int m_nSecond;
virtual double GetResult()
{
double dResult=0;
return dResult;
}
};
//加法
class AddOperation : public COperation
{
public:
virtual double GetResult()
{
return m_nFirst+m_nSecond;
}
};
//减法
class SubOperation : public COperation
{
public:
virtual double GetResult()
{
return m_nFirst-m_nSecond;
}
};
//工厂类
class CCalculatorFactory
{
public:
static COperation* Create(char cOperator);
};
COperation* CCalculatorFactory::Create(char cOperator)
{
COperation *oper;
//在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI??
switch (cOperator)
{
case +:
oper=new AddOperation();
break;
case -:
oper=new SubOperation();
break;
default:
oper=new AddOperation();
break;
}
return oper;
}
客户端
int main()
{
int a,b;
cinab;
COperation * op=CCalculatorFactory::Create(-);
op-m_nFirst=a;
op-m_nSecond=b;
coutop-GetResult()endl;
return 0;
}
(二)策略模式
定义算法家族,分别封装起来,让它们之间可以互相替换,让算法变化,不会影响到用户
GOOD:适合类中的成员以方法为主,算法经常变动;简化了单元测试(因为每个算法都有自己的类,可以通过自己的接口单独测试。
策略模式和简单工厂基本相同,但简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。
BUG:客户端要做出判断
例
//策略基类
class COperation
{
public:
int m_nFirst;
int m_nSecond;
virtual double GetResult()
{
double dResult=0;
return dResult;
}
};
//策略具体类—加法类
class AddOperation : public COperation
{
public:
AddOperatio
您可能关注的文档
- 创业板和中小企业板的数据的实证研究毕业论文.doc
- 创业板市场与中小企业融资探析_毕业论文.doc
- 创业路路基与基层施工方案毕业论文.doc
- 创业投资项目的财务评价研究_工程硕士论文.doc
- 创业投资项目的财务评价研究硕士学位论文.doc
- 创意平板折叠桌大学生数学建模全国一等奖论文.doc
- 创意平板折叠桌论文.doc
- 创意平板折叠桌设计毕业论文.doc
- 创意平板折叠桌数学建模竞赛B题全国二等奖论文.doc
- 创意烟灰缸数控加工工艺分析_毕业论文.doc
- 古诗鉴赏阅读(解析版)-2023年中考语文一轮复习题型-中考语文备考资料.pdf
- 2025届吉林省松原第五中学物理八年级第一学期期末复习检测试题含解析.doc
- 2025届湖北宜昌物理八年级第一学期期末监测模拟试题含解析.doc
- 2025届新疆生产建设兵团物理八年级第一学期期末复习检测模拟试题含解析.doc
- 2025届广东省汕头市汕头市聿怀初级中学物理八年级第一学期期末学业水平测试模拟试题含解析.doc
- 重庆实验外国语学校2025届八年级物理第一学期期末检测模拟试题含解析.doc
- 2025届黑龙江省大庆杜尔伯特县联考物理八上期末达标测试试题含解析.doc
- 2025届湖北省襄州区六校联考物理八年级第一学期期末复习检测试题含解析.doc
- 巴中市重点中学2025届八年级物理第一学期期末调研模拟试题含解析.doc
- 2025届吉林省长春市汽车经济开发区第五校八年级物理第一学期期末检测试题含解析.doc
文档评论(0)