23种设计模式C++实例之装饰模式
2015-12-16 10:58
537 查看
装饰模式就是在不改变原有的类的情况下,给它添加功能。
#include <iostream>
using namespace std;
/*
* 装饰模式:在不改变原类和使用继承的情况下,对类进行功能的增强
* 对类a功能的增强
* */
class Car {
public:
virtual ~Car() {}
virtual void go() = 0;
};
class RunCar: public Car {
public:
virtual void go() {
cout << "car can run" << endl;
}
};
class FlyCar: public Car {
public:
FlyCar(Car* car) {
m_car = car;
}
virtual void go() {
m_car->go();
fly();
}
void fly() {
cout << "car can fly" << endl;
}
private:
Car* m_car;
};
class SwimCar: public Car {
public:
SwimCar(Car* car) {
m_car = car;
}
virtual void go() {
m_car->go();
swim();
}
void swim() {
cout << "car can swim" << endl;
}
private:
Car* m_car;
};
int main() {
Car* run = NULL;
run = new RunCar();
run->go();
cout << endl;
FlyCar* fly = new FlyCar(run);
run->go();
cout << endl;
SwimCar* swim = new SwimCar(fly);
swim->go();
cout << endl;
delete swim;
delete fly;
delete run;
return 0;
}
#include <iostream>
using namespace std;
/*
* 装饰模式:在不改变原类和使用继承的情况下,对类进行功能的增强
* 对类a功能的增强
* */
class Car {
public:
virtual ~Car() {}
virtual void go() = 0;
};
class RunCar: public Car {
public:
virtual void go() {
cout << "car can run" << endl;
}
};
class FlyCar: public Car {
public:
FlyCar(Car* car) {
m_car = car;
}
virtual void go() {
m_car->go();
fly();
}
void fly() {
cout << "car can fly" << endl;
}
private:
Car* m_car;
};
class SwimCar: public Car {
public:
SwimCar(Car* car) {
m_car = car;
}
virtual void go() {
m_car->go();
swim();
}
void swim() {
cout << "car can swim" << endl;
}
private:
Car* m_car;
};
int main() {
Car* run = NULL;
run = new RunCar();
run->go();
cout << endl;
FlyCar* fly = new FlyCar(run);
run->go();
cout << endl;
SwimCar* swim = new SwimCar(fly);
swim->go();
cout << endl;
delete swim;
delete fly;
delete run;
return 0;
}
相关文章推荐
- 23种设计模式C++实例之代理模式
- c语言基础
- oc中new和init的区别
- 23种设计模式C++实例之适配器模式
- Blade - 腾讯开源的构建系统 c/c++编译环境
- c++11: allocator construct
- windows C++ 创建快捷方式API, 100% 能运行
- 在vs2008 C++下调试控制台程序的心得及技巧
- Pro*C/C++具体操作
- 23种设计模式C++实例之外观模式
- C语言中define的用法
- OC语言——把四个十进制三位数存放到一个数组中,然后按升序排序
- c++ 自定义排序容器set
- C++命名空间namespace
- C++ 类模板不能实现分离式编译
- Debug实模式调试
- c++ 线程类
- 【C++】深度探索C++对象模型之虚拟成员函数(virtual member function)
- C++静态库与动态库
- 值得推荐的C/C++框架和库 (真的很强大)