设计模式(3)-装扮你的类(装饰模式)
时间:2022-05-04
本文章向大家介绍设计模式(3)-装扮你的类(装饰模式),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先看看书上的例子吧!人穿衣服的例子!
类图就不画了,就是简单的类结构。
代码如下:
#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是具体的装饰对象。
看看原来的类图修改如下
这样,就可以实现对人对象的动态装载,不过,这个例子举得感觉不是很好,没有列出装饰模式的精髓。
- Android 自定义标签 ViewLayout
- Identity Service - 解析微软微服务架构eShopOnContainers(二)
- 机器学习之随机森林
- Catalog Service - 解析微软微服务架构eShopOnContainers(三)
- EventBus In eShop -- 解析微软微服务架构Demo(四)
- Health Check in eShop -- 解析微软微服务架构Demo(五)
- Android Studio相见恨晚的操作锦集
- [收藏]几个常用的用正则表达式验证字符串的函数
- 走进科学: 无线安全需要了解的芯片选型、扫描器使用知识
- React Native之携程Moles框架
- 从Android短信漏洞到手机钓鱼木马
- 老外手把手带你搭建DMZ渗透测试实验室(Part 1,2)
- 与机器学习算法有关的数据结构
- 32764端口后门重出江湖,影响多款路由器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法