- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件设计模式培训
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 不同之处(续) 2. 语意上的区别 Bridge模式强调Implementor接口仅提供基本操作,而Abstraction则基于这些基本操作定义更高层次的操作 Strategy模式强调Strategy抽象接口的提供的是一种算法,而Context则简单调用这些算法完成其操作 3.?粒度上的区别 Bridge模式中不仅定义Implementor的接口而且定义Abstraction的接口,Abstraction的接口不仅仅是为了与Implementor通信而存在的,这也反映了结构型模式的特点:通过继承、聚合的方式组合类和对象以形成更大的结构 在Strategy模式中,Startegy和Context的接口都是两者之间的协作接口,并不涉及到其它的功能接口 总结 相对Strategy模式,Bridge模式要表达的内容要更多,结构也更加复杂。 Bridge模式表达的主要意义其实是接口隔离的原则,即把本质上并不内聚的两种体系区别开来,使得它们可以松散的组合,而Strategy在解耦上还仅仅是某一个算法的层次,没有到体系这一层次。 从结构图中可以看到,策略的结构是包容在Bridge结构中的,Bridge中必然存在着Strategy模式,Abstraction与Implementor之间就可以认为是Strategy模式,但是Bridge模式一般Implementor将提供一系列的成体系的操作,而且Implementor是具有状态和数据的静态结构。而且Bridge模式Abstraction也可以独立变化。 五、Abstract Factory模式 Abstract Factory模式解决的问题 关注点分离 将对象的创建与对象的使用分离 看一个例子(图形显示的例子): 设计一个系统来显示和打印数据库中读出的图形,并满足: 根据当前所使用硬件的配置来选择驱动——速度快的机器选择高分辨率的显示、打印驱动,速度慢的选择低分辨率的驱动 驱动的选择依据如下表所示 驱动类型 在低配置硬件情况下 在高配置硬件情况下 显示驱动 LRDD (Low-resolution display driver) HRDD (High-resolution display driver) 打印驱动 LPPD (Low-resolution print driver) HPPD (High-resolution print driver) 一般的解决方案: 代码: class ApControl{ DisplayDriver* dp; PrintDriver* pp; public: ApControl(RESOLUTION RES){ switch (RES){ case LOW: dp=new LRDD; pp=new LRPD; case HIGH: dp=new HRDD; pp=new HRPD; } void doDraw(){ dp-line(); dp-point(); } void doPrint(){ dp-line(); dp-point(); } }; 对象的创建 对象的使用 对象的创建与使用这两个关注点没有分离 如何分离? 自然我们会想到用另外一个对象来专门负责对象的生成——产生了工厂类的概念 为什么要分离? 代码: class ApControl{ DisplayDriver* dp; PrintDriver* pp; public: ApControl(RESOLUTION RES){ switch (RES){ case LOW: dp=CreateHRD::CreateDisplayDriver(); pp=CreateHRD::CreatePrintDriver(); case HIGH: dp=CreateLRD::CreateDisplayDriver(); pp=CreateLRD::CreatePrintDriver(); } void doDraw(){ dp-line(); dp-point(); } void doPrint(){ dp-line(); dp-point(); } }; 对象的创建 对象的使用 对象创建与对象
您可能关注的文档
最近下载
- 自考 新思想学习资料 15040新思想 主观题.pdf VIP
- 郑功成“社会保障学”名词解释.pdf VIP
- 《PLC应用技术(西门子上册)第2版》中职技工全套教学课件.pptx
- 澳大利亚矿产资源和矿石储量报告规范JORC2004(中文版).doc VIP
- 澳大利亚矿产资源和矿石储量报告规范2004(英文版)..doc VIP
- 法语TCF-TEF高频词汇表.pdf VIP
- 电子商务运营 案例上 1”小罐茶“微信社交平台销售教学案例--得物App教学案例.pdf VIP
- T/CAQI 32-2017_家用和类似用途饮用水处理装置用电磁阀.pdf VIP
- 北美营养品比较指南.doc VIP
- 自动控制原理及其应用答案版黄坚课后答案.ppt VIP
文档评论(0)