腾讯大讲堂05面向对象应对之道 .ppt

  1. 1、本文档共88页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模板方法 观察者 抽象工厂 桥 职责链 组合 Reactor ac 设计模式实例—模板方法 在一个框架里面,比如MFC,要做本身框架的初始化代码,又要给不同的业务留下初始化各自业务的空间。同时框架代码是以二进制形式发布的,不能在里面添加代码。怎么办? 一个MFC应用程序的WinMain函数哪里去了? MFC的解决实例 模板方法类图结构 设计模式实例—观察者 一个分层的架构,越下层的结构往往越通用,下层不能依赖于上层。但是下层又有东西要通知上层。比如 网络层不能依赖于领域层,问怎么能做到? 观察者标准类图 观察者实际代码例子 class CmdObserver { public: CmdObserver(); virtual ~CmdObserver(); virtual int CmdDone(CCommand *pCmd,int iResult = CmdSucceed); }; class CCommand { public: CCommand(); virtual ~CCommand(); virtual int RegisterObserver(CmdObserver *pObserver); virtual int NotifyObserver(int iResult = CmdSucceed); private: CSetCmdObserver* ,MAXOBSERVERNUM m_ObserverSet; }; 这个实例中,命令是属于基础设施层的东西,但是要通知上层业务逻辑,自己的状态变迁。所以使用观察者。 设计模式实例—抽象工厂 OO比较强调创建这个行为。一方面创建有时候本身很复杂;另一方面,程序很多的灵活性需要通过一种合适的创建方式才能获得。 当new一个对象的时候,写new的这个代码的类就产生了对new出对象的依赖。我们当然希望频繁变化的逻辑不要被上层依赖。 那么为了能做到这一点,就需要有合适的创建方式。 简单的工厂 抽象工厂 1.抽象工厂强调的是一系列相关的变化聚合在一起,有几个系列,就有几个具体的工厂。 2.切换的时候,打一个开关就可以了。使得变化相当的容易,明显。 3.工厂创建的东西互相不干扰。各干各的活。 抽象工厂特征 设计模式实例—桥 有一类模块,对外提供抽象接口,实现一个功能。它有两个维度的变化。 一个维度是提供的抽象功能,可能在变化。 另一个维度是实现抽象功能的实现方式也会变化。 另外一种情况是提供的抽象功能给外部接口,不希望这个接口频繁变化,给外部带来困扰。 问怎么实现这个需求? ACE Reactor-实现视图 设计模式实例-职责链 应用层协议确定分发问题: 比如我们要分析网络上各种应用层协议内容。包括smtp,http,pop3,ftp等等。应用层协议是会增加的。现在问题是一个网络连接,我们无法知道它走的是什么协议。 一个简单的端口是无法准确判断的。 问怎么做这个问题的设计方案。 职责链好处如下 各个协议分开,各干各的活 不会互相干扰。做到高内聚,低耦合。 新协议的增加是很简单的,甚至可以做到动态增加。可以做到开闭原则。 设计模式实例-组合模式 请用OO描述QQGame的目录树结构。 请在这个描述结构上计算目录树各层人数。 设计模式实例—Reactor 做许多网络服务器/客户端的时候,基本上每一个都会用到select或类似功能函数。多线程/多进程模式除外。 当select 检测到某个fd有数据的时候,我们再去读取数据。基本上这部分代码和我们的业务逻辑代码混合在一起。 在一个网络服务器里面,基本都需要定时器的操作。 这些每一个网络服务器都需要的东西,能否提取出来?形成一个通用解决框架。 注意Reactor对概念的抽象,和应用的分层隔离。这些经典的手段。 设计模式实例—异步命令模式 高效的网络服务器/客户端经常遇到异步操作问题。 异步响应回来的时候,如何知道异步请求时候的状态是什么一直是个问题。 这个操作超时,完成,失败和业务逻辑的隔离也存在问题。 ACT异步回调TOKEN的概念。 异步命令模式框图 时序图 将异步操作和业务逻辑隔离。 利用异步回调TOKEN找到响应消息观察者。通用解决方式。 利用命令保存异步操作请求时候状态。方便响应回来时候恢复。 谢谢 QA * 想表达面向对象的主要观念,方法和原则。 设计模式是方法层面上的东西。 在这些方法之后是面向对象的观念在支撑。 为什么这样做是好的?什么是好的标准? 想结合许多代码的例子来表明面向对象怎么来看这2个问题。 理解了面向对象的观念,对于方法层面的理解应该会更好一点。同时对于全局写代码时可以建立自己的原则。 * 介绍面向对象的一般手法,原则和几个设计模式来。

文档评论(0)

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

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

1亿VIP精品文档

相关文档