某科技公司设计模式培训10659.pptx
《某科技公司设计模式培训10659.pptx》由会员分享,可在线阅读,更多相关《某科技公司设计模式培训10659.pptx(89页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、设计模式设计模式 定制人员定制人员:严海全严海全 审核人员审核人员:李洪强、李洪强、梁黎、张应能、向飞、李庚、刘晓静梁黎、张应能、向飞、李庚、刘晓静 实施日期实施日期:2011-8-182011-8-18培训目的培训目的通过本课程的学习,您将能够:学习设计模式可复用面向对象软件的基础一些的基础知识。学会使用几种设计模式,每种讲到的模式,都有个人经历过的项目中的应用举例。适用对象:软件开发人员培训大纲培训大纲设计模式可复用面向对象软件的基础基础学习为什么需要设计模式(Design Pattern)OMT表示方法23个设计模式的组织面向对象的一些设计原则几种设计模式介绍Singleton(单件)A
2、dapter(适配器)Observer(观察者)Mediator(中介者)Command(命令)State(状态)Strategy(策略)设计模式设计模式可复用面向对象软件的基础基础学习可复用面向对象软件的基础基础学习为什么需要设计模式(为什么需要设计模式(Design PatternDesign Pattern)面向对象程序设计OOP基本原则:计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。面向对象的三个特征:封装、继承、多态面向对象的设计程序语言完全的面向对象的语言:Smalltalk、JAVA、C#进化到面向对象的语
3、言:C-C+,C-Objective-C,BASIC-Visual Basic-Visual Basic.NET,Pascal-Object Pascal,Ada-Ada95面向对象的建模语言:UML设计模式设计模式可复用面向对象软件的基础基础学习可复用面向对象软件的基础基础学习为什么需要设计模式(为什么需要设计模式(Design PatternDesign Pattern)使用面向对象的程序设计语言在开发中最痛苦的是什么?1,选择太多,无从下手:publicprotectedprivate继承组合聚实现继承接口继承成员变量局部变量简单设计复杂设计2,没有正确答案:不知道我们是否真正的实现了面
4、向对象的要求,看别人写的东西都是垃圾,自己写的东西慢慢也成为了垃圾,最后就是痛苦一个难题没有正确答案往往都很痛苦。问题总结为:怎样才能实现好的设计,什么才是好的怎样才能实现好的设计,什么才是好的设计设计高可复用性,高灵活性,高扩展性高内聚,低耦合设计模式设计模式可复用面向对象软件的基础基础学习可复用面向对象软件的基础基础学习为什么需要设计模式(为什么需要设计模式(Design PatternDesign Pattern)设计模式的第一章就告诉了我们一种答案“选择太多,无从下手”的解答:一下子就得到复用性和灵活性好的设计,不可能或非常困难。内行的设计者:复用以前使用过的可行的软件设计解决方案。“
5、没有正确答案”的解答:已经验证过的被多次使用的面向对象的设计就是很好的设计。设计模式这本书的目的就是将面向对象软件的设计经验作为设计模式记录下来,所以可以作为面向对象的设计的“武林秘籍”。我们看懂了这本书,加上灵活应用,就可以说是行家,就可以站在巨人的肩膀上作出好的设计。设计模式设计模式可复用面向对象软件的基础基础学习可复用面向对象软件的基础基础学习为什么需要设计模式(为什么需要设计模式(Design PatternDesign Pattern)设计模式定义定义:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。四
6、个基本要素四个基本要素:模式名称、问题、解决方案、效果描述方式描述方式:模式名模式名和分类、意图意图、别名别名、动机、适用适用性性、结构结构、参与者、协作、效果、实现实现、代码示例、已知应用应用、相关模式编目编目:23个设计模式,3个类别(创建型、结构型、行为型)类类实例化实例化继承继承抽象类和实现伪代码抽象类和实现伪代码混入类和多继承混入类和多继承委托委托关联关联/依赖依赖聚合或相识聚合或相识OMT表示法表示法OMT表示法表示法设计模式设计模式可复用面向对象软件的基础基础学习可复用面向对象软件的基础基础学习面向对象的设计原则面向对象的设计原则面向对象的一些设计原则1.6.1寻找合适的对象:什
7、么时候设计类,候选词分析法,多个设计模式创造了一些类。1.6.2决定对象的粒度:多个设计模式可以优化对象的粒度。1.6.3指定对象接口:候选词分析法,多个设计模式也有指导。1.6.4描述对象的实现区分类继承与接口继承:简单理解C+纯虚函数类(抽象类)针对接口编程而不是针对实现编程(原则一)针对接口编程而不是针对实现编程(原则一):简单理解,为了复用,多使用抽象类,而实现对象的创建使用创建模式来创建。优先考虑接口的设计是复用的关键。1.6.5运用复用机制继承与组合的比较:优先使用对象组合,而不是类继承(原则二)优先使用对象组合,而不是类继承(原则二)。继承有很多缺点,组合体现了封装性,组合可以达
8、到少的类多的对象提高复用。委托:类似UML中的依赖关系,关键点是可以创造一些委托对象(设计考虑的),来简化类的复杂度,提高复用度。(用得最多)继承和参数化类型的比较:参数化类型也就是C+中的模板,书里没有对应的模式。设计模式设计模式可复用面向对象软件的基础基础学习可复用面向对象软件的基础基础学习面向对象的设计原则面向对象的设计原则面向对象的一些设计原则1.6.6关联运行时刻和编译时刻的结构:我的理解:这里的编译时刻确定的代码结构指的每个对象的大小,各个对象之间的依赖关系,是静态的;运行时刻才能确定的结构指对象的数量、生命周期和所属关系等等,这是动态的。聚合与相识的区别:为了说明运行时刻和编译时
9、刻而举的一个(有点糊涂)的例子。简单点就是,A有B类型的指针,B的属于A(B在A内部创建销毁)就是聚合,A只是使用到B,A和B的生命周期没有直接关系就是相识。1.6.7设计应支持变化关键:在于对新需求和已有需求发生变化时的预见性。学习几种设计模式学习几种设计模式SingletonSingleton(单件)(单件)学习几种设计模式学习几种设计模式SingletonSingleton(单件)(单件)意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。适应性:简单的说,就是代替全局对象。结构:学习几种设计模式学习几种设计模式SingletonSingleton(单件)(单件)实现:1.实现唯
10、一的实例:构造函数是protected的,static全局函数获取对象。2.创建Singleton的子类:别学了。问题:如何销毁?学习几种设计模式学习几种设计模式SingletonSingleton(单件)(单件)应用举例:/xtp皮肤库使用CXTPColorManager&AFX_CDECL CXTPColorManager:Instance()static CXTPColorManager instance;return instance;/SVR客户端通讯库使用CNMSLib*CNMSLib:GetInstance()static CNMSLib instance;return&inst
11、ance;学习几种设计模式学习几种设计模式SingletonSingleton(单件)(单件)网上“设计模式与追MM”:(刚才做了个梦)俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Singleton,她们只要说道“老公”,都是指的同一个人,那就是我。巧妙之处:一点小技巧,可以保证一个类只能实例化一次,并且可代替全局对象。学习几种设计模式学习几种设计模式AdapterAdapter(适配器)(适配器)学习几种设计模式学习几种设计模式AdapterAdapter(适配器)(适配器)意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作
12、的那些类可以一起工作。别名:Wrapper适应性:以下情况使用Adapter模式 你想使用一个已经存在的类,而它的接口不符合你的需求。你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。学习几种设计模式学习几种设计模式AdapterAdapter(适配器)(适配器)结构:学习几种设计模式学习几种设计模式AdapterAdapter(适配器)(适配器)实现:抽象类对象组合(推举)或私有继承学习几种设计模式学
13、习几种设计模式AdapterAdapter(适配器)(适配器)应用举例1:学习几种设计模式学习几种设计模式AdapterAdapter(适配器)(适配器)应用举例2:/CU和NCUI中,解码器代码:class IDecoderAdapter /创建解码器 virtual BOOL CreateDecoder(HWND hMonitorWnd)=0;/设置视频显示窗口 virtual BOOL SetPlayHwnd(HWND hMonitorWnd)=0;virtual BOOL StartPlayStream(BOOL bVideo,WORD wVideoPort,BOOL bAudio,W
14、ORD wAudioPort)=0;/停止播放码流 virtual BOOL StopPlayStream()=0;.class CKdmDecAdapter:public IDecoderAdapter 学习几种设计模式学习几种设计模式AdapterAdapter(适配器)(适配器)应用举例3:架构中使用:学习几种设计模式学习几种设计模式AdapterAdapter(适配器)(适配器)网上“设计模式与追MM”:在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了
15、(也不知道他会不会耍我)。巧妙之处:系统核心逻辑不需改,通过外围修改就可以扩充功能,是扩充协议、复用同类模块的灵丹妙药。学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。别名:发布-订阅(Publish-Subscribe)适应性:在以下任一情况下可以使用观察者模式:当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改
16、变和复用。当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之,你不希望这些对象是紧密耦合的。学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)结构学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)结构学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)实现学习几种设计模式学习几种设计模式ObserverObserver(观察者)(
17、观察者)实现学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)应用举例1:NCUI数据管理与界面更新class CObserver;class CSubjectpublic:CSubject(void);virtual CSubject(void);virtual void Attach(CObserver*po);virtual void Detach(CObserver*po);void Notify(CObserver*pSender,LPARAM lHint=0L,LPVOID pHint=NULL);void ClearObservers();pro
18、tected:CList m_Observers;学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)应用举例1:NCUI数据管理与界面更新class CObserverpublic:CObserver(void);virtual CObserver(void);virtual void OnNotify(CObserver*pSender,LPARAM lHint,LPVOID pHint);class CNcDataManager:public CSubject /管理所有的客户端数据class CBodyMonitor:public CBodyBase,p
19、ublic CObserver /多画面窗口class CBodyTVWall:public CBodyBase,public CObserver /电视墙多画面窗口class CPaneEncodereEx:public CPaneBase,public CObserver/设备树面板class CPanePTZCtrl:public CPaneBase,public CObserver /PTZ控制面板class CBodyPlayer:public CBodyBase,public CObserver /录像回放控制面板class CPaneRecCalendar:public CPan
20、eBase,public CObserver/录像回放月历面板学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者)应用举例1:NCUI数据管理与界面更新/电子地图告警数据class CEmapAlarmData:public CSubject/电子地图告警数据相关的UIclass CDlgEMapAlarmList:public CDialog,public CObserverclass CEmapListBox:public CNcListBox,public CObserver学习几种设计模式学习几种设计模式ObserverObserver(观察者)(观察者
21、)应用举例2:SVR Station数据管理与界面更新/通知消息const u16 WM_DM_LOCAL_LOGGED_IN=(WM_UI_MSG_BEGIN+6);/本地已登录成功const u16 WM_DM_LOCAL_LOGGED_OUT=(WM_UI_MSG_BEGIN+7);/本地已登出完成/客户端数据管理class CNMSDataMgrpublic:void RegDMTarget(HWND hWnd,u16 wDM,BOOL bMoveToFirst=FALSE);/注册消息目标BOOL UnregDMTarget(HWND hWnd,u16 wDM);/反注册消息目标vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 科技 公司 设计 模式 培训 10659
限制150内