C++设计模式第七讲解析.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C设计模式第七讲解析,设计模式解析,23种设计模式全解析,ios设计模式解析pdf,设计模式解析pdf,设计模式解析第2版,ios设计模式解析,javaee设计模式解析,c程序设计习题与解析,c语言程序设计解析

* 《C++设计模式教程》 第七讲:UIPPaint设计模式(实现篇) (中间者、门面、状态、命令、访问者、职责链设计模式) 主讲人:步磊峰 UIPower 3D界面引擎负责人 第一节:整体架构UML图 * 第一节:整体架构UML图 * 第一节:整体架构UML图 * 第二节:实现:访问者模式 * 意图: 表示一个作用于某对象结构中各个元素的操作。它使你可以在不改变各个元素的类的前提下定义作用于这些元素的 新操作。 用途: 1、一个对象结构包含很多类,他们有不同接口,而你想对这些对象实施一些依赖于其具体类的操作。 2、定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重新定义对所有访问者 的接口,这可能需要很大代价。如果对象结构类经常改变,那么还是在该对象结构类中定义相关操作较好。 第二节:实现:访问者模式 * 根据需求: 我们会发现当处于CRectState时候,鼠标点击PaintArea时,需要创建一个以鼠标点击处为中心点的形状。 因此我们需要形状(或者叫图元) 目前支持三种图元 : CRectShape,CCircleShape,CTriangleShape,他们都继承自CShapeBase类,每种图元都能 被点中并且被填充,因此需要支持鼠标碰检事件。 所有的图元我们需要使用CShapManager来进行管理。 第二节:实现:访问者模式 * 图元的绘制有两种方式: 1、在每个CShapeBase中定义一个虚函数Render(),每个子类都override Render函数,实现绘制代码,这意味着 所有的绘制代码都分散在每个实际的子类中。 2、 我们使用访问者模式,所有的实际子类的绘制代码全部放在CDrawerVisitor类中,如果要修改或增加功能,只要 修改CDrawerVisitor类就可以了。我们使用该方式实现图元的渲染。 CShapeBase中有一个纯虚函数: 第三节:实现:状态模式 * 意图: 允许一个对象在其内部状态改变时改变他的行为。 用途: 1、 一个对象的行为取决于他的状态,并且他必须在运行时根据状态改变行为。 2、 一个操作中含有庞大的多分支的条件语句。这个状态通常用一个或多个枚举常量表示。通常多个操作包含这一 相同的条件结构 。State模式将每个条件分支放入一个独立的类中。这使得你可以根据对象的自身情况将对象 的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。 第三节:实现:状态模式 * 根据需求: 当我们鼠标点中某个IconButton时,会触发Selected为true的事件,或许我们可以直接监听该事件作出要绘制哪 个类型的Shape的行为,但是这种方式使Shape和控件系统紧密耦合。我们换种思路。 我们会发现当选中某一个按钮时,每个按钮所做的事情不一样,也就是说图形编辑器的状态会影响程序要执行的 动作。这种情况特别适合使用状态模式进行设计。因此我们引进一个中间层,让IconButton的状态切换与状态机 进行交互。使用状态模式我们能够显著的消除掉if/else或switch/case语句的使用。 上述分析后,我们会发现,每一个IconButton对应一个状态,例如RectButton选中时,对应的是CRectState。 CircleButton选中时,切换到CCircleState。因此我们只要监听IconButton的Selected事件,在事件响应函数 中进行状态的切

文档评论(0)

441113422 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档