定义: 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。、
UML图:
代码实现:
class Game {
public:
Game() {}
virtual ~Game() {}
virtual void play()
{
std::cout << "game play" << std::endl;
}
};
class CarGame : public Game {
public:
void play() override
{
std::cout << "car game play" << std::endl;
}
};
class BirdGame : public Game {
public:
void play() override
{
std::cout << "lol game play" << std::endl;
}
};
class DecoratorGame : public Game {
protected:
Game *m_pGame;
public:
DecoratorGame(Game *game),m_pGame(game){};
void play() override
{
m_pGame->play();
}
virtual ~DecoratorGame() {}
};
class BasketBallGame : public DecoratorGame {
public:
BasketBallGame(Game *game) : DecoratorGame(game) {}
void play() override {
std::cout << "basketball game play" << std::endl;
DecoratorGame::play();
}
};
class SocketBallGame : public DecoratorGame {
public:
SocketBallGame(Game *game) : DecoratorGame(game) {}
void play() override {
std::cout << "socket game play" << std::endl;
DecoratorGame::play();
}
};
int main() {
Game *birdGame = new BirdGame ();
Game *carGame = new CarGame();
// 一个人既会打篮球又会打愤怒小鸟可以如下使用
Game* basketball_bird = new BasketBallGame(birdGame );
basketball_bird ->play();
// 一个人既会打篮球又会玩卡丁车可以如下使用
Game* basketball_car = new BasketBallGame(car);
basketball_car->play();
return 0;
}