C++中的外观模式

2024-06-12 07:04
文章标签 c++ 模式 外观

本文主要是介绍C++中的外观模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

外观模式(Facade Pattern)

实际应用

计算机启动系统

家庭影院系统

旅行预订系统

总结


外观模式(Facade Pattern)

外观模式是一种结构型设计模式,它为复杂子系统提供一个更高级的统一接口,使得子系统更容易使用。外观模式隐藏了系统的复杂性,并向客户端提供了一个简化的接口。

通过外观模式,客户端不需要直接与子系统的各个组件交互,而是通过一个外观对象与整个子系统进行交互,从而简化了客户端的操作。

实际应用

计算机启动系统

假设有一个复杂的计算机启动系统,包括CPU、内存、硬盘等多个组件。

#include <iostream>// 子系统类:CPU
class CPU {
public:void freeze() {std::cout << "Freezing CPU\n";}void jump(long position) {std::cout << "Jumping to position " << position << "\n";}void execute() {std::cout << "Executing instructions\n";}
};// 子系统类:内存
class Memory {
public:void load(long position, const std::string& data) {std::cout << "Loading data into memory at position " << position << "\n";}
};// 子系统类:硬盘
class HardDrive {
public:std::string read(long lba, int size) {std::cout << "Reading " << size << " bytes from LBA " << lba << "\n";return "bootloader";}
};// 外观类
class ComputerFacade {
private:CPU cpu;Memory memory;HardDrive hardDrive;public:void start() {cpu.freeze();memory.load(0, hardDrive.read(0, 1024));cpu.jump(0);cpu.execute();}
};int main() {ComputerFacade computer;computer.start();return 0;
}

家庭影院系统

假设有一个复杂的家庭影院系统,包括投影仪、音响、DVD播放器等多个组件。

#include <iostream>// 子系统类:投影仪
class Projector {
public:void on() {std::cout << "Turning on the projector\n";}void off() {std::cout << "Turning off the projector\n";}void setInput(const std::string& input) {std::cout << "Setting projector input to " << input << "\n";}
};// 子系统类:音响
class SoundSystem {
public:void on() {std::cout << "Turning on the sound system\n";}void off() {std::cout << "Turning off the sound system\n";}void setVolume(int level) {std::cout << "Setting sound system volume to " << level << "\n";}
};// 子系统类:DVD播放器
class DVDPlayer {
public:void on() {std::cout << "Turning on the DVD player\n";}void off() {std::cout << "Turning off the DVD player\n";}void play(const std::string& movie) {std::cout << "Playing movie: " << movie << "\n";}
};// 外观类
class HomeTheaterFacade {
private:Projector projector;SoundSystem soundSystem;DVDPlayer dvdPlayer;public:void watchMovie(const std::string& movie) {std::cout << "Get ready to watch a movie...\n";projector.on();projector.setInput("DVD");soundSystem.on();soundSystem.setVolume(10);dvdPlayer.on();dvdPlayer.play(movie);}void endMovie() {std::cout << "Shutting down movie theater...\n";projector.off();soundSystem.off();dvdPlayer.off();}
};int main() {HomeTheaterFacade homeTheater;homeTheater.watchMovie("Inception");homeTheater.endMovie();return 0;
}

旅行预订系统

假设有一个复杂的旅行预订系统,包括航班预订、酒店预订和租车预订等多个组件。

#include <iostream>// 子系统类:航班预订
class FlightBooking {
public:void bookFlight(const std::string& destination) {std::cout << "Booking flight to " << destination << "\n";}
};// 子系统类:酒店预订
class HotelBooking {
public:void bookHotel(const std::string& location) {std::cout << "Booking hotel in " << location << "\n";}
};// 子系统类:租车预订
class CarRentalBooking {
public:void bookCar(const std::string& location) {std::cout << "Booking car rental in " << location << "\n";}
};// 外观类
class TravelFacade {
private:FlightBooking flightBooking;HotelBooking hotelBooking;CarRentalBooking carRentalBooking;public:void bookCompleteTrip(const std::string& destination) {std::cout << "Booking complete trip to " << destination << "...\n";flightBooking.bookFlight(destination);hotelBooking.bookHotel(destination);carRentalBooking.bookCar(destination);}
};int main() {TravelFacade travelFacade;travelFacade.bookCompleteTrip("Hawaii");return 0;
}

总结

外观模式可以简化复杂子系统的使用。所以无论是计算机启动系统、家庭影院系统还是旅行预订系统,外观模式都能提供一个简化的接口,使客户端能够更容易地与复杂子系统进行交互。

这篇关于C++中的外观模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053514

相关文章

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操