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

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

代码如下:

#include <iostream>using namespace std;class person{
private:string name;
public:person(string name){this->name = name;}void wearTShirts(){cout<<"大T恤"<<endl;}void wearBigTrouser(){cout<<"跨裤"<<endl;}void wearSneakers(){cout<<"破球鞋"<<endl;}void wearSuit(){cout<<"西装"<<endl;}void wearTie(){cout<<"领带"<<endl;}void wearLeatherShoes(){cout<<"皮鞋"<<endl;}void show(){cout<<"装扮的"<<name.c_str()<<endl;}
};int main(int argc, char* argv[])
{person* p = new person("小张");cout<<"第一种装扮"<<endl;p->wearLeatherShoes();p->wearSuit();p->wearBigTrouser();p->show();cout<<"第二种装扮"<<endl;p->wearLeatherShoes();p->wearTShirts();p->wearSneakers();p->show();return 0;
}

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

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

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

从而引出装饰模式

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

类结构如下

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

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

Dectorator是装饰抽象类

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

看看原来的类图修改如下

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

设计模式(3)-装扮你的类(装饰模式)相关推荐

  1. 设计模式之禅之结构类PK【装饰模式VS适配器模式】

    设计模式之禅PK之结构类 结构类设计模式 结构类模式: 适配器模式 桥梁模式 组合模式 装饰模式 门面模式 享元模式 代理模式 相同点:他们都是通过组合类或对象产生更大的结构以适应更高的层次的逻辑需求 ...

  2. 设计模式C++实现(11)——装饰模式

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最 ...

  3. ULM图解 “23种设计模式”,及实例的类图

    UML图解设计模式 23种设计模式分为三大类 创建型模式(5种) 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式 结构型模式(7种) 适配器模式 装饰模式 代理模式 外观模式 桥接模式 组 ...

  4. 设计模式(二)--UML类图和设计模式概述

    一.UML类图 1.UML 基本介绍 UML--Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用 于帮助软件开发人员进行思考和 ...

  5. 大话设计模式学习笔记(6)——装饰模式

    问题提出 为一个模特穿衣服.要求根据用户的需求能够有不同的装扮.(注意要符合我们的几个原则--依赖倒转,开放闭合,单一职责等). 穿衣过程暴露在外 class Main {public static ...

  6. 设计模式C++实现(3)——装饰模式

    装饰模式:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活.有时我们希望给某个对象而不是整个类添加一些功能.比如有一个手机,允许你为手机添加特性,比如增加挂件.屏幕贴膜 ...

  7. java中单例设计模式登记式单例类_java23种设计模式-创建型模式之单例模式

    单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比较频 ...

  8. 使用设计模式构建通用数据库访问类

    在应用程序的设计中,数据库的访问是非常重要的,我们通常需要将对数据库的访问集中起来,以保证良好的封装性和可维护性.在.Net中,数据库的访问,对于微软自家的SqlServer和其他数据库(支持OleD ...

  9. 设计模式C++实现(7)——装饰模式

    装饰模式:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活.有时我们希望给某个对象而不是整个类添加一些功能.比如有一个手机,允许你为手机添加特性,比如增加挂件.屏幕贴膜 ...

最新文章

  1. linux xampp常见问题
  2. RAC 的一些概念性和原理性的知识
  3. 湖南2021年计算机一级考试,2021年湖南计算机一级考试时间(4页)-原创力文档...
  4. ACM入门之【前缀和】
  5. 关于QSerialPort的使用说明(Qt实现串口工具)
  6. Eurasia3 支持百万级用户的服务器和框架 - 国内开源项目介绍
  7. 【Linux系统编程学习】 静态库的制作与使用
  8. 算法---计算平方根(牛顿迭代法)
  9. C# Conditional(方法,属性的忽略)使用
  10. python zen_The Zen of Python
  11. Log:日志选型调研『一』
  12. 记录一次 Deadlock found when trying to get lock; try restarting transaction 错误
  13. 远程高效办公指南,每天都是能量满满的workaholism!
  14. 怎么查看视频的md5值
  15. Unity鼠标光标使用学习
  16. 豆瓣电影数据可视化大屏
  17. 石墨笔记,Onenote和Effie哪个适合SMZDM开箱评论者?
  18. matlab之ARMA(p,q)模型
  19. 新瑞波XAG在新宿聚会,株氏会社和風现场确认合作
  20. 计算机网络系统互联,关于计算机网络系统的开放性结构与网络互联

热门文章

  1. matlab 画函数图像
  2. FPGA逻辑设计回顾(11)FPGA以及PC中的RAM与ROM
  3. 雅克比(Jacobi)迭代法求解线性方程组
  4. 中消协:警惕以治病为噱头的保健品虚假宣传行为
  5. [CSAcademy]Virus on a Tree
  6. 星巴克和阿里“结婚”,这后面真的不简单
  7. decorator and @property
  8. ORACLE 修改SID
  9. 巧解SEP杀毒软件卸载需要密码才能完全卸载问题
  10. java去重复的集合_如何去除Java中List集合中的重复数据