手机上怎么查看网站设计,钻井网站建设,wordpress 显示缩略图,网络销售主要做些什么链接#xff1a;C 设计模式 链接#xff1a;C 设计模式 - 代理模式 链接#xff1a;C 设计模式 - 中介者 链接#xff1a;C 设计模式 - 适配器
门面模式#xff08;Facade Pattern#xff09;是一种结构型设计模式#xff0c;它为子系统中的一组接口提供一个一致#…链接C 设计模式 链接C 设计模式 - 代理模式 链接C 设计模式 - 中介者 链接C 设计模式 - 适配器
门面模式Facade Pattern是一种结构型设计模式它为子系统中的一组接口提供一个一致稳定的界面。门面模式定义了一个高层接口这个接口使得这一子系统更加容易使用复用。
1.问题分析
在开发中尤其是大型系统中子系统之间的交互和依赖关系可能非常复杂。客户端需要调用多个子系统的接口来完成一个功能这会导致以下问题
复杂性增加客户端代码需要了解多个子系统的接口和调用顺序增加了代码的复杂性。高耦合度客户端与多个子系统直接交互导致客户端与子系统之间的耦合度很高难以维护和扩展。难以使用对于新手或不熟悉系统的开发者来说直接使用多个子系统的接口可能会感到困难。
为了解决这些问题我们可以使用门面模式。门面模式通过提供一个高层接口简化了客户端对多个子系统的使用降低了系统的复杂性和耦合度。
门面模式并非一个集装箱可以任意地放进任何多个对象。组件的内部应该是“相互耦合关系比较大的一系列组件”而不是一个简单的功能集合。它更注重从架构的层次去看整个系统而不是单个类的层次门面模式很多时候更是一种架构设计模式。
2.实现步骤
定义子系统类实现子系统的具体功能。每个子系统类负责处理特定的任务并提供相应的接口供外部调用。定义Facade类提供一个高层接口调用子系统类的功能。Facade类封装了子系统的复杂性对外提供简化的接口。客户端代码通过Facade类来访问子系统的功能。客户端只需要与Facade类交互而不需要直接与子系统类交互。
3.代码示例
以机器人作为示例。
3.1.定义子系统类
// 运动子系统
class MovementSystem {public:void start() { std::cout Movement system started. std::endl; }void stop() { std::cout Movement system stopped. std::endl; }
};// 语音子系统
class SpeechSystem {public:void start() { std::cout Speech system started. std::endl; }void stop() { std::cout Speech system stopped. std::endl; }void speak(const std::string message) { std::cout Robot says: message std::endl; }
};// 传感器子系统
class SensorSystem {public:void activate() { std::cout Sensor system activated. std::endl; }void deactivate() { std::cout Sensor system deactivated. std::endl; }void readSensors() { std::cout Reading sensor data... std::endl; }
};3.2.定义Facade类
// Facade类提供一个高层接口封装子系统的复杂性
class RobotFacade {public:RobotFacade() : movementSystem_(new MovementSystem()), speechSystem_(new SpeechSystem()), sensorSystem_(new SensorSystem()) {}~RobotFacade() {delete movementSystem_;delete speechSystem_;delete sensorSystem_;}void startRobot() {std::cout Starting robot... std::endl;sensorSystem_-activate();movementSystem_-start();speechSystem_-start();speechSystem_-speak(Hello, I am your robot assistant.);}void stopRobot() {std::cout Stopping robot... std::endl;speechSystem_-speak(Goodbye!);movementSystem_-stop();speechSystem_-stop();sensorSystem_-deactivate();}void performTask(const std::string task) {std::cout Performing task: task std::endl;sensorSystem_-readSensors();speechSystem_-speak(I am performing the task: task);// 这里可以添加更多的任务逻辑}private:MovementSystem* movementSystem_;SpeechSystem* speechSystem_;SensorSystem* sensorSystem_;
};3.3.客户端代码
通过Facade类来访问子系统的功能
int main() {RobotFacade robot;// 启动机器人robot.startRobot();// 执行任务robot.performTask(cleaning);// 停止机器人robot.stopRobot();return 0;
}