Design/bridge/Bridge.hpp
2024-10-28 14:07:29 +08:00

72 lines
1.4 KiB
C++

/*
* @Description:
* @version:
* @Author: 莫邪
* @Date: 2023-10-16 09:43:55
* @LastEditors: 莫邪
* @LastEditTime: 2023-10-16 11:12:45
*/
#include <iostream>
#include <memory>
class Game {
std::string name;
public:
Game(std::string name) : name(name) {}
virtual ~Game() = default;
virtual void Play() = 0;
void print() { std::cout << name << std::endl; }
};
class RunningGame : public Game {
public:
RunningGame() : Game("Running") {}
void Play() override { std::cout << "Play Running Game." << std::endl; }
};
class ShootingGame : public Game {
public:
ShootingGame() : Game("Shooting") {}
void Play() override { std::cout << "Play Shooting Game." << std::endl; }
};
class Phone {
std::shared_ptr<Game> game;
public:
Phone() {}
virtual ~Phone() = default;
virtual void Download(std::shared_ptr<Game> game) = 0;
virtual void Open() = 0;
};
class iPhone : public Phone {
std::shared_ptr<Game> game;
public:
void Download(std::shared_ptr<Game> game) override {
std::cout << "iPhone. download ";
game->print();
this->game = game;
}
void Open() override {
std::cout << "iPhone. start ";
game->Play();
}
};
class Samsung : public Phone {
std::shared_ptr<Game> game;
public:
void Download(std::shared_ptr<Game> game) override {
std::cout << "Samsung. download ";
game->print();
this->game = game;
}
void Open() override {
std::cout << "Samsung. start ";
game->Play();
}
};