- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章设计模式祥解.ppt
5.3 常用设计模式 解决方案分析(参考): -算法的整体处理流程是相同的,唯一有差别的是比较规则 -可否把比较规则参数化? 5.3 常用设计模式 解决方案分析(参考): 损失了一些执行效率,但具备了更好的代码复用性,完全符合“开闭原则”。 如果结构体具有更多成员,当增加新的排序规则时,无需修改排序算法,只需增加新的比较规则函数即可,这做到了对扩展开放,对修改关闭。 5.3 常用设计模式 ●策略模式 策略模式定义了算法族(比较规则),分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 (摘录自:《HeadFirst设计模式》) 5.3 常用设计模式 ●状态模式 问题提出:MP3播放器,能在播放、暂停、停止之间切换。详细要求: -播放状态下可响应暂停、停止操作 -暂停状态下课响应播放、停止操作 -停止状态下只能响应播放操作 补充说明,提供以下函数: void Play() : 停止到播放时调用 void Pause() : 播放到暂停时调用 void Resume():暂停到播放时调用 void Stop():播放或暂停 到 停止时调用 键盘上输入1,代表按下播放键;键盘上输入2,代表按下暂停键;键盘上输入3,代表按下停止键。 5.3 常用设计模式 问题分析:这是一个非常典型的有限状态机(Finite State Machine, FSM),通过状态图来描述一下问题: Stop Play Pause PlayKey / Play() StopKey / Stop() PauseKey / Pause() PauseKey or PlayKey / Resume() StopKey / Stop() 5.3 常用设计模式 常见做法:通过嵌套switch-case来实现 5.3 常用设计模式 优点 -代码逻辑简单,易理解 -对于简单的状态机,可采用嵌套switch-case结构 缺点 -对于有多个状态、多个事件的状态机,代码冗长,解读和维护将变得异常困难。 -状态机逻辑和实现动作的代码没有很好地分离。 5.3 常用设计模式 解决方案:通过查表代替嵌套switch-case结构: typedef enum tagState_t { STS_PLAY, STS_PAUSE, STS_STOP, STS_MAX }State_t; typedef struct tagPlayMgr_t{ State_t NextSts; void (*Action)(void); }PlayMgr_t; PlayMgr_t MyMgrTbl[]={{STS_PLAY,play},{STS_PAUSE,pause},{STS_STOP,stop},{STS_MAX,NULL}}; 谢谢! 人有了知识,就会具备各种分析能力, 明辨是非的能力。 所以我们要勤恳读书,广泛阅读, 古人说“书中自有黄金屋。 ”通过阅读科技书籍,我们能丰富知识, 培养逻辑思维能力; 通过阅读文学作品,我们能提高文学鉴赏水平, 培养文学情趣; 通过阅读报刊,我们能增长见识,扩大自己的知识面。 有许多书籍还能培养我们的道德情操, 给我们巨大的精神力量, 鼓舞我们前进。 * 设计模式要遵循设计原则,设计原则本身也是成熟的设计模式。 设计模式像极了咱们老祖宗传下来的中国功夫,可能就是简单的二十四式,只要招式烂熟与胸,实战时,一切都会自然流露,不会特意去想用哪一招。而是完全根据场景,对手、目标而自然的出招。如果说你的代码中没有用到模式,那可能实战就是泼妇打架,一通乱拳了,高手当然不会如此。学习模式的一个捷径是看一些经典成熟的代码。 设计模式要遵循设计原则,设计原则本身也是成熟的设计模式。 * 这是通常做法 * 分析:每个函数的处理流程相同,只是处理的数据和执行的动作不同罢了。 能否将处理流程独立出来,让处理的数据和执行的动作以参数的形式传递给函数呢? * * 不好的做法 * Entities:实体;实际存在物;本质 解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。 * Parser:分析器 * * 输入命令时,同时确定argv[i] * * * * * * * 第五章 设计模式 目标: 本章旨在向学员介绍: 5.1 什么是设计模式 5.2 常用设计原则 5.3 常用设计模式 时间:4学时 教学方法:讲授PPT+ 案例分析 软件之美在于它的功能,在于它的内部结构,还在于团队创建它的过程。对用户来说,通过直观、简单的界面呈现出恰当特性的程序就
文档评论(0)