博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(3)-装扮你的类(装饰模式)
阅读量:6938 次
发布时间:2019-06-27

本文共 745 字,大约阅读时间需要 2 分钟。

首先看看书上的例子吧!人穿衣服的例子!

类图就不画了,就是简单的类结构。

代码如下:

#include 
using namespace std;class person{private: string name;public: person(string name){ this->name = name; } void wearTShirts(){ cout<<"大T恤"<
wearLeatherShoes(); p->wearSuit(); p->wearBigTrouser(); p->show(); cout<<"第二种装扮"<
wearLeatherShoes(); p->wearTShirts(); p->wearSneakers(); p->show(); return 0;}

如果要新添加一种装扮,那么就需要修改person类的结构,这样就违反了开闭原则

那就先做抽象好了,把变化的抽象出来,于是类图结构如下

2011041315295158.jpg

 对应这个实现上面的程序,好像是方便了一些,但是如果继续增加需求呢?就会出现很多的子类。

从而引出装饰模式

装饰模式是动态的给对象增加一些属性和职责

类结构如下

2011041315454745.jpg

Componment是定义的一个对象接口,可以给这些对象动态的添加职责

ConcertComponent是要被装饰的对象,即原始对象

Dectorator是装饰抽象类

ConcertDectoratorA和ConcertDectoratorB是具体的装饰对象。

看看原来的类图修改如下

2011041316073432.jpg

这样,就可以实现对人对象的动态装载,不过,这个例子举得感觉不是很好,没有列出装饰模式的精髓。

转载地址:http://bzfnl.baihongyu.com/

你可能感兴趣的文章
ipad 如何将iphone应用程序运行在ipad中。
查看>>
JavaScript与C# Windows应用程序交互
查看>>
面试题11:数值的整数次方
查看>>
tar.gz 和tar.bz2 详细解释
查看>>
Silverlight实现对Sql Server Profiler的SQL实时监控
查看>>
变长参数列表函数
查看>>
你知道输出结果么?
查看>>
CI批量更新$this->db->update_batch();
查看>>
USB学习笔记连载(十六):USB数字签名
查看>>
android 自定义AlertDialog(一段)
查看>>
Git - 操作指南
查看>>
jstorm简介(转)
查看>>
Spark&Hadoop:scala编写spark任务jar包,运行无法识别main函数,怎么办?
查看>>
Kafka Java API操作topic
查看>>
Starting vsftpd for vsftpd: [FAILED]问题的解决
查看>>
tomcat 使用log4j进行日志切割
查看>>
Python之关于量化投资实现代码--根据策略提出的代码--还未完善
查看>>
动手解决困扰自己的事情——记屏蔽网页广告
查看>>
mvn -DskipTests和-Dmaven.test.skip=true区别
查看>>
代码保存、配色、公布-总体方案----一段代码的公布
查看>>