#include <iostream>
#include <string>
// 播放器基类
class Player {
public:
virtual void on() = 0;
virtual void off() = 0;
virtual void play(std::string) = 0;
virtual void stop() = 0;
virtual ~Player() {}
};
// DVD 播放器
class DvdPlayer : public Player {
public:
void on() override {
std::cout << "DvdPlayer is on." << std::endl;
}
void off() override {
std::cout << "DvdPlayer is off." << std::endl;
}
void play(std::string movie) override {
std::cout << "Playing " << movie << " on DvdPlayer." << std::endl;
}
void stop() override {
std::cout << "DvdPlayer is stopped." << std::endl;
}
};
// 投影仪
class Projector {
public:
void on() {
std::cout << "Projector is on." << std::endl;
}
void off() {
std::cout << "Projector is off." << std::endl;
}
};
// 灯光
class Light {
public:
void on() {
std::cout << "Light is on." << std::endl;
}
void off() {
std::cout << "Light is off." << std::endl;
}
};
// 家庭影院外观类
class HomeTheaterFacade {
private:
DvdPlayer dvdPlayer_;
Projector projector_;
Light light_;
public:
HomeTheaterFacade(DvdPlayer dvdPlayer, Projector projector, Light light) :
dvdPlayer_(dvdPlayer), projector_(projector), light_(light) {}
void watchMovie(std::string movie) {
std::cout << "Get ready to watch a movie..." << std::endl;
light_.off();
projector_.on();
dvdPlayer_.on();
dvdPlayer_.play(movie);
}
void endMovie() {
std::cout << "Shutting movie theater down..." << std::endl;
light_.on();
projector_.off();
dvdPlayer_.stop();
dvdPlayer_.off();
}
};
int main() {
DvdPlayer dvdPlayer;
Projector projector;
Light light;
HomeTheaterFacade homeTheater(dvdPlayer, projector, light);
homeTheater.watchMovie("The Matrix");
homeTheater.endMovie();
return 0;
}
【C++】【设计模式】外观模式
最新推荐文章于 2024-07-25 17:57:45 发布