装饰器(Decorater)
来源:互联网 发布:波士顿矩阵图,何种业务 编辑:程序博客网 时间:2024/05/17 23:14
装饰器(Decorator)是一种对象结构型设计模式。
1.目的
动态地给一个对象添加一些职责。别名称为包装器(Wrapper)。
2.使用范围
(1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;采用装饰器,可以在动态运行时刻添加和分离的方式增加和删除职责,相比较静态继承而言,有着更大的灵活性。
(2)对不能采用子类的方法进行扩充。可以避免子类数目的爆炸性增长,或者类定义被隐藏和类定义为不能用于生成子类时同样可以扩充。
3.优缺点
(1)装饰器不同于其组件,它只是对组件的一个透明的包装。
(2)避免了在层次结构高层的类有太多的特征。这些特征都可以通过装饰器去履行职责。
4.代码示例
这里加入我们要建立一个房间,需要用花和木板去装饰。则可以定义一个抽象的公共基类包含所有组件和装饰器的接口,并让装饰器包含一个公共基类的指针从而完成动态调用。如下:
//// Decorator.h// Decorator//// Created by chenhuamin on 14-5-22.// Copyright (c) 2014年 chenhuamin. All rights reserved.#ifndef Decorator_h#define Decorator_h#include <iostream>using namespace std;/**************************************** 装饰器模式(Decorator)用于动态地给一个对象 添加一些额外的职责。 这里打算建造一个房间,并用花装饰器和木板装饰 器对房间进行构造。 ***************************************/class Room{public:virtual void Decorate(){}};//my roomclass MyRoom:public Room{public: MyRoom(){} virtual void Decorate(){}};//decoratorclass Decorator:public Room{public: Decorator(Room* room):_room(room){} virtual void Decorate() {_room->Decorate(); }protected: Room* _room;};//Concrete decoratorclass FowlerDecorator:public Decorator{public: FowlerDecorator(Room* room):Decorator(room){} virtual void Decorate() {Decorator::Decorate(); cout<<"Fowler is decorated in your room~"<<endl; } };class BoardDecorator:public Decorator{public: BoardDecorator(Room* room):Decorator(room){} virtual void Decorate() { Decorator::Decorate(); cout<<"Board is decorated in your room~"<<endl; }};#endif
5.测试用例Room* myroom=new MyRoom; Room* p=new BoardDecorator(new FowlerDecorator(myroom)); p->Decorate();
0 0
- 装饰器(Decorater)
- Python 装饰器decorater
- java设计模式--装饰者模式(Decorater Pattern)
- java装饰者模式decorater
- python decorater working priciple
- 装饰器(Decorator)
- (九)装饰器
- 装饰器(Decorator)
- 【Python学习日记】【设计模式】装饰器(装饰模式)
- decorator(HTML装饰器)
- Decorator(装饰器模式)
- 装饰器模式(Decorator)
- Session_Decorator(装饰器模式)
- Python 装饰器 (十八)
- Python 装饰器( Decorator)
- 装饰器模式(Decorator )
- Decorator(装饰器)模式
- python(八)装饰器
- poj1743 Musical Theme 二分+后缀数组
- oracle数据库删除重复数据
- for循环嵌套讲解:
- 开始我的博客
- 关于 Java 中 finally 语句块的深度辨析
- 装饰器(Decorater)
- PHP操作MSSQL数据库的类
- 黑马程序员—基础-基础语法知识总结-2
- 附录以及部分源代码
- Linux编程的几个重要知识点
- wait 和 sleep 区别?
- SQLite安全性的问题
- 【Leetcode】String to Integer (atoi)
- Linux 下安装配置 JDK7