结构型 装饰器模式

简介: 结构型 装饰器模式

装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。如:将一个形状装饰上不同的颜色,同时又不改变形状。(增强原对象功能)

装饰器模式:

被装饰的对象作为抽象基类,我们用子类实现对该对象增加额外的功能。

定义一个基础类,使用子类一直扩展功能。

源码demo:

/*********************************************************************************************************************
装饰模式又叫做包装模式。
  通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。
装饰模式:
  就是把要(添加的附加功能)分别放在单独的类中,并让这个类包含它要装饰的对象,
  当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。
适用于:
  装饰者模式:  动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。
通过定义一个接口,然后将不同的子类的功能挨个添加到此接口当中,
  完成对对象的功能的添加比通过继承来扩充类的功能强大很多。
通过定义一个抽象类接口函数,然后子类去实现它。
  然后添加一项功能就派生出一个类,然后将要装饰的对象扔进去
使用基类指针指向其传递来的对象,去调用它原来的功能。
然后定一个装饰类指针指向装饰对象(被装饰的对象) 调用接口函数(接口函数去调用它原来的自己的接口)
**********************************************************************************************************************/
#include <iostream>
using namespace std;
class Car
{
public://定义一个抽象类,完成接口的定义
  virtual void show() = 0;
};
class RunCar : public Car
{
public:
  void run(){ cout << "可以跑" << endl;}
  virtual void show()
  {  run();  }
};
class SwimCarDirector : public Car
{
public:
  SwimCarDirector(Car *p){  m_p = p;}
  void swim(){  cout << "可以游" << endl;}
  virtual void show()
  {
    m_p->show();
    swim();
  }
  private:
    Car *m_p;//通过基类指针进行操作
};
class FlyCarDirector : public Car
{
public:
  FlyCarDirector(Car *p){m_p = p;}
  void fly(){  
    cout << "可以飞" << endl;
  }
  virtual void show()
  {
    m_p->show();
    fly();
  }
private:
  Car *m_p;//通过基类指针进行操作
};
int main()
{
  Car *runcar = new RunCar;
  runcar->show();
  cout << "车开始装饰swim" << endl;
  SwimCarDirector *swimCar = new SwimCarDirector(runcar);
  swimCar->show();
  cout << "车开始装饰fly" << endl;
  FlyCarDirector *flyCar = new FlyCarDirector(swimCar);
  flyCar->show();
  delete flyCar;
  delete swimCar;
  delete runcar;
  return 0;
}
目录
相关文章
|
6月前
结构型 代理模式
结构型 代理模式
40 0
|
设计模式 算法 uml
结构型设计模式01-装饰模式
结构型设计模式01-装饰模式
31 0
|
5月前
|
设计模式
结构型设计模式之装饰模式
结构型设计模式之装饰模式
|
6月前
|
设计模式
装饰器模式
装饰器模式
33 0
|
6月前
|
设计模式 C++
【C++】—— 装饰器模式
【C++】—— 装饰器模式
|
6月前
|
设计模式
结构型设计模式:装饰器模式
结构型设计模式:装饰器模式
39 0
|
6月前
|
设计模式 C++
结构型 适配器模式
结构型 适配器模式
37 0
|
设计模式
设计模式-结构型模式:装饰模式
设计模式-结构型模式:装饰模式
|
设计模式
2023-6-26-第八式装饰器模式
2023-6-26-第八式装饰器模式
74 0
|
前端开发 BI
关于装饰器模式我所知道的
关于装饰器模式我所知道的
77 0