页数:42页文件大小:211.0 KB来源: 设计模式ppt课件
本课件进入行为型设计模式,先区分数据表示、接口与实现上的变化以及静态性、动态性与交互变化,再依次讲解策略、状态、中介者与观察者四种模式的意图、结构、效果与实现代码。
第二部分行为型设计模式
访问者模式(Vistor Pattern)
行为的变化
数据表示的变化
数据的类型、数量、可访问性、组织形式等class One {public:virtual ~One() { ….. }virtual void Do() { …. }private:int x;int y;Two * pTwo;};接口的变化
等等class One {public:virtual ~One() { ….. }virtual void Do() { …. }private:int x;int y;};class One {public:virtual ~One() { ….. }virtual void Do() { …. }virtual void Do2() { …. }private:int x;int y;};实现中的静态性变化
具体类的行为静态性template <typename T >class One {public:virtual ~One() { ….. }virtual void Do(T& aT){ …. }private:T * pt;};#include “Two.h”One<Two> aOne;具体类的行为静态性
只有Do1的实现改变
Do1和Do2同时变化
具体类行为的动态性
交互上的变化需要
行为模式主要针对
2.1策略模式(Strategy Pattern)
2.1.1策略模式意图
2.1.2例
2.1.3适用性
2.1.4类图结构
2.1.5策略模式效果
2.1.6补充说明
2.2状态模式(State Pattern)
2.2.1状态模式意图
2.2.2例
2.2.3状态模式类图
2.2.4状态模式效果
2.2.5对比策略模式
2.3中介者模式(Mediator Pattern)
2.3.1中介者模式意图
2.3.2中介者模式类图
2.3.4中介者模式适用性
2.3.5中介者模式效果
2.3.6中介者模式的实现
2.4观察者模式(Observer Pattern)
2.4.1观察者模式意图
2.4.2观察者模式结构无法显示该图片。
2.4.3观察者模式变体
2.4.4观察者模式效果
2.4.5观察者模式的实现问题
2.4.6例子代码class Subject;class Observer{public:virtual ~Observer();virtual void Update(Subject * theChangedSubject) = 0;};class Subject {public:Subject( );virtual ~Subject( );virtual void Atach(Observer * obj ) {observers->Append(obj);}virtual void Detach(Observer * obj) {observers->Remove(obj);}virtual void Notify() {ListIterator<Observer *> i(observers);for( i.First(); !i.IsDone();i.Next()) {i.CurrentItem()->Update(this);}}private: List<Observer *> * observers;};//具体的目标类ClockTimerclass ClockTimer:public Subject{public:ClockTimer( );virtual int GetHour();virtual int GetMinute();virtual int GetSecond();void Tick() {//记录当前时间Notify();}};//具体的观察者类DigitalClockclass DigitalClock:public Observer {public:DigitalClock(ClockTiemr * theSubject){subject = theSubject;subject->Attach(this);}virtual ~DigitalClock(){subject->Detach(this);}virtual void Update(Subject * theChangedSubject){if(theChangedSubject == subject) {Draw();}}virtual void Draw() {int h= subject->GetHour();int m = subject->GetMinute();int s = subject->GetSecond();//绘制时钟,略}private: ClockTimer * subject;};客户代码:ClockTimer * timer = new ClockTimer;AnalogClock * analogClock = newAnalogClock(timer);DigitalClock * digitalClock = newDigitalClock(timer);
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}