C++设计模的式第六讲.ppt

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

* 《C++设计模式教程》 第六讲:UIPPaint设计模式(分析篇) (中间者、门面、状态、命令、访问者、职责链设计模式) 主讲人:步磊峰 UIPower 3D界面引擎负责人 前言:UIPPaint需求描述 * 第一节:UIPPaint需求分析--需要哪些控件 * 这是一个比较简单的程序,如果我们根据需求,直接编码的话,可能很快就会实现所有功能。 但是这不是我们的目的。我们要使用各种合适的设计模式,降低代码的耦合性,使其非常容易扩展,在添加功能的时 候,不需要修改很多代码。归根结底,我们要根据需求实现一个可扩展,容易修改,低耦合性的框架。 那么我们来分析需求,提出设计思路: 1) UIPLib仅提供了CControlBase基类,封装了一些不变的流程,但是并没有提供实际的绘图功能,需要我们自己实 现具体的控件。根据前面的需求,我们发现我们需要一个Button控件,表现形式如同CheckBox类型,当多个Butt on在同一组时,有且只有一个处于选中状态。当一组Button某个按钮被选中时,要触发Selected为true的事件, 而与此同时,同组的其他Button触发Selected为false的事件(Unselected)。选中时使用一个Icon,未选中时使 用另外一个Icon,以区分这两种状态。 我们编写CIconButton控件用于上述用途。实际上CIconButton区分是否 是toggle类型Button(符合上述需求)和非toggle类型Button(鼠标按下使用一种Icon,鼠标弹起使用另外一种 Icon)。 第一节:UIPPaint需求分析--需要哪些控件 * 2) 需要另外一个控件CPaintArea,表示一个可绘制的区域。它会绘制边框和背景色。 为了支持图元对象的绘制(CShapeBase的子类,在本Demo中是CRectShape,CCircleShape,CTriangleShape), 我们在CPaintArea中override 受保护的虚函数OnRender,并在最后触发CRenderEvent事件: 为了简单起见,我们同时使用CPaintArea作为左侧工具按钮 集合的父亲,这样将toggle按钮以CPaintArea为父亲分成一 组: 第二节:UIPPaint需求分析--状态模式 * 根据需求: 当我们鼠标点中某个IconButton时,会触发Selected为true的事件,或许我们可以直接监听该事件作出要绘制哪 个类型的Shape的行为,但是这种方式使Shape和控件系统紧密耦合。我们换种思路。 我们会发现当选中某一个按钮时,每个按钮所做的事情不一样,也就是说图形编辑器的状态会影响程序要执行的 动作。这种情况特别适合使用状态模式进行设计。因此我们引进一个中间层,让IconButton的状态切换与状态机 进行交互。使用状态模式我们能够显著的消除掉if/else或switch/case语句的使用。 上述分析后,我们会发现,每一个IconButton对应一个状态,例如RectButton选中时,对应的是CRectState。 CircleButton选中时,切换到CCircleState。因此我们只要监听IconButton的Selected事件,在事件响应函数 中进行状态的切换。那么由谁来进行状态切换呢? 状态设计模式涉及到两个层次,第一层次是CStateManager类负责所有状态管理,其持有一个CurrentState的指 针,用于指向当前的状态。当CStateManager设置状态时,最好能够发送状态发生改变的消息,并且 CurrentState针指向刚设置的状态。因此由CStateManager来进行状态切换是非常合适的。 第二节:UIPPaint需求分析--状态模式 * 第二个层次是CStateBase以及所有的子类。

文档评论(0)

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

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

1亿VIP精品文档

相关文档