网站策划报告书怎么做,安卓手机性能优化软件,威海建设集团招聘信息网站,网页上一页下一页代码链接#xff1a;C 设计模式 链接#xff1a;C 设计模式 - 装饰模式
桥接模式#xff08;Bridge Pattern#xff09;是一种结构型设计模式#xff0c;它通过将抽象部分#xff08;业务功能#xff09;与实现部分#xff08;平台实现#xff09;分离#xff0c;使它们…链接C 设计模式 链接C 设计模式 - 装饰模式
桥接模式Bridge Pattern是一种结构型设计模式它通过将抽象部分业务功能与实现部分平台实现分离使它们可以独立变化。桥接模式的核心思想是将抽象与实现解耦使得它们可以独立地扩展和变化。
1.问题分析
在开发中我们经常遇到需要将抽象部分与其实现部分分离的情况以便它们可以独立变化。例如
不同的任务如巡逻、运输、侦查可以使用不同的设备如机器人、传感器。不同的图形形状如圆形、矩形可以使用不同的绘制方式如矢量图、位图。
如果将抽象部分与实现部分紧密耦合在一起当需要添加新的实现或新的抽象时代码的修改和维护将变得非常复杂。桥接模式通过将抽象部分与实现部分分离使它们可以独立变化从而提高系统的灵活性和可扩展性。
2.实现步骤
定义实现接口定义一个接口描述实现部分的行为。实现具体实现实现具体实现类提供不同的实现部分。定义抽象类定义一个抽象类描述抽象部分的行为并持有一个实现部分的引用。实现具体抽象实现具体抽象类提供不同的抽象部分。客户端代码动态地组合不同的抽象部分和实现部分并执行任务。
3.代码示例
以机器人的任务作为示例。
3.1.定义实现接口
// 机器人平台接口
class RobotPlatform {public:virtual ~RobotPlatform() default;virtual void move() 0;
};3.2. 实现具体实现类
// 具体机器人平台1四足机器人
class QuadrupedRobot : public RobotPlatform {public:void move() override { std::cout Moving as a quadruped robot. std::endl; }
};// 具体机器人平台2轮式机器人
class WheeledRobot : public RobotPlatform {public:void move() override { std::cout Moving as a wheeled robot. std::endl; }
};// 具体机器人平台3履带机器人
class TrackedRobot : public RobotPlatform {public:void move() override { std::cout Moving as a tracked robot. std::endl; }
};3.3. 定义任务抽象类
// 定义一个任务抽象类描述机器人的任务行为并持有一个机器人平台对象的引用
class Task {public:Task(std::shared_ptrRobotPlatform robotPlatform) : platform(robotPlatform) {}virtual void performTask() 0;protected:std::shared_ptrRobotPlatform platform;
};3.4. 实现具体的任务
// 具体任务1巡逻
class Patrolling : public Task {public:Patrolling(std::shared_ptrRobotPlatform robotPlatform) : Task(robotPlatform) {}void performTask() override {std::cout Performing patrolling task. std::endl;platform-move();}
};// 具体任务2运输
class Transporting : public Task {public:Transporting(std::shared_ptrRobotPlatform robotPlatform) : Task(robotPlatform) {}void performTask() override {std::cout Performing transporting task. std::endl;platform-move();}
};// 具体任务3侦查
class Reconnaissance : public Task {public:Reconnaissance(std::shared_ptrRobotPlatform robotPlatform) : Task(robotPlatform) {}void performTask() override {std::cout Performing reconnaissance task. std::endl;platform-move();}
};3.5. 客户端代码
// 动态地组合不同的任务和机器人平台并执行任务。
int main() {// 创建具体的机器人平台std::shared_ptrRobotPlatform quadrupedRobot std::make_sharedQuadrupedRobot();std::shared_ptrRobotPlatform wheeledRobot std::make_sharedWheeledRobot();std::shared_ptrRobotPlatform trackedRobot std::make_sharedTrackedRobot();// 创建具体的任务并组合合理的机器人平台std::shared_ptrTask patrollingWithQuadruped std::make_sharedPatrolling(quadrupedRobot);std::shared_ptrTask transportingWithWheeled std::make_sharedTransporting(wheeledRobot);std::shared_ptrTask reconnaissanceWithTracked std::make_sharedReconnaissance(trackedRobot);// 执行任务std::cout Patrolling with Quadruped Robot: std::endl;patrollingWithQuadruped-performTask();std::cout \nTransporting with Wheeled Robot: std::endl;transportingWithWheeled-performTask();std::cout \nReconnaissance with Tracked Robot: std::endl;reconnaissanceWithTracked-performTask();return 0;
}4.总结
桥接模式和装饰模式的区别
桥接模式将抽象部分与实现部分分离使它们可以独立变化。它通过将抽象和实现放在不同的类层次结构中并通过组合将它们连接起来从而提高系统的灵活性和可扩展性。。装饰模式动态地给对象添加职责而不改变对象的接口。它通过创建一系列装饰器类来实现这些职责的扩展从而在运行时灵活地扩展对象的功能。