软件体系结构第9讲详解
* Lexi的修饰用户界面与修饰(Decorator)模式 void MonoGlyph::Draw (Window* w) { _component-Draw(w); } void Border::Draw (Window* w) { MonoGlyph::Draw(w); DrawBorder(w); } * border中有一个成员变量scrollbar,border 的绘制时调用scrollbar的绘制方法 scrollbar 中有一个成员变量composition,scrollbar 的绘制时调用compositon的绘制方法 * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 意图 动态地给一个对象添加一些额外的操作,就增加功能来说,Decorator 模式相比生成子类更为灵活。 别名 包装器 Wrapper * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 动机 类似于Lexi中给文本添加用户界面 * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 动机 * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 代码示例 VisualComponent 类: class VisualComponent { public: VisualComponent(); virtual void Draw(); virtual void Resize(); // ... }; * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 代码示例 Decorator 类: class Decorator : public VisualComponent { public: Decorator(VisualComponent*); virtual void Draw(); virtual void Resize(); // ... private: VisualComponent* _component; }; * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 代码示例 Decorator 类中 Draw 和 Resize 的实现: void Decorator::Draw () { _component-Draw(); } void Decorator::Resize () { _component-Resize(); } * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 代码示例 BorderDecorator 类及 Draw 的实现: class BorderDecorator : public Decorator { public: BorderDecorator(VisualComponent*, int borderWidth); virtual void Draw(); private: void DrawBorder(int); private: int _width; }; void BorderDecorator::Draw () { Decorator::Draw(); DrawBorder(_width); } * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 代码示例 如何使用 Decorator 创建一个具有边界的可滚动 TextView: 创建一个正文视图: TextView* textView = new TextView; 创建一个有边界的和可以滚动的TextView, BorderDecorator bd(new ScrollDecorator(textview), 1); * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 适用性 结构 * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 参与者 Component (Visual Component) 定义一个对象接口 ConcreteComponent (TextView) 定义一个对象,可以给这个对象添加一些动作 Decorator 维持一个指向Component 对象的指针,并定义一个与Component 接口一致的接口 ConcreteDecorator(BorderDecorator, ScrollDecorator) 向组件添加动作 * Lexi的修饰用户界面与修饰(Decorator)模式 修饰模式 协作 Decorator 将请求转发给它的 Componen
您可能关注的文档
- 轧钢厂固体废弃物综合利用详解.ppt
- 轨道交通用直流电力电缆详解.doc
- 轧胚机安装过程详解.ppt
- 车辆—连接详解.ppt
- 江西初中一年级第4单元第4课_中秋咏月诗词三首分解.ppt
- 轨道电路工作原理课件详解.doc
- 轨道交通概论-项目8详解.ppt
- 轨道电路2详解.ppt
- 轨道车理论学习题1详解.doc
- 建筑安全资料讲座(安培学校)分解.ppt
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
最近下载
- DLT5375-2018 火力发电厂可行性研究报告内容深度规定.pdf VIP
- (2026年春新版)人教版八年级生物下册全册教案.doc
- ISO 5173 2009 金属材料焊缝的破坏性试验—弯曲试验(中文版).pdf VIP
- (高清版)DB13(J)∕T 8555-2023 县城特色风貌设计标准.pdf VIP
- 高级政治经济学(蔡继明)6.分工体系与广义价值决定.ppt VIP
- 潍坊亚星新材料有限公司500吨年六氯环三磷腈和500吨年苄索氯铵项目环境影响报告书.pdf VIP
- 最新2026年时事政治题单招及答案(夺冠).docx VIP
- 学校1530安全教育记录(2026年春季期).docx
- [会计理论葛家澍pdf]葛家澍和他的会计时代.docx VIP
- 解读GB 6441-2025《生产安全事故分类与编码》.pptx
原创力文档

文档评论(0)