C++结构型设计模式之使用抽象工厂来创建和配置桥接模式的例子

server/2024/11/25 13:28:28/

下面是一个使用抽象工厂模式来创建和配置桥接模式的示例,场景是创建不同操作系统的窗口(Window)及其对应的实现(WindowImpl)。我们将通过抽象工厂来创建不同操作系统下的窗口和实现。

代码示例

#include <iostream>// 抽象产品:窗口接口
class Window {
public:virtual void draw() = 0;virtual void resize() = 0;
};// 抽象产品:窗口实现接口
class WindowImpl {
public:virtual void drawImpl() = 0;virtual void resizeImpl() = 0;
};// 具体产品:Windows窗口
class WindowsWindow : public Window {
private:WindowImpl* impl;public:WindowsWindow(WindowImpl* impl) : impl(impl) {}void draw() override {std::cout << "Drawing Windows Window" << std::endl;impl->drawImpl();}void resize() override {std::cout << "Resizing Windows Window" << std::endl;impl->resizeImpl();}
};// 具体产品:Linux窗口
class LinuxWindow : public Window {
private:WindowImpl* impl;public:LinuxWindow(WindowImpl* impl) : impl(impl) {}void draw() override {std::cout << "Drawing Linux Window" << std::endl;impl->drawImpl();}void resize() override {std::cout << "Resizing Linux Window" << std::endl;impl->resizeImpl();}
};// 具体产品:Windows窗口实现
class WindowsWindowImpl : public WindowImpl {
public:void drawImpl() override {std::cout << "Drawing Windows Impl" << std::endl;}void resizeImpl() override {std::cout << "Resizing Windows Impl" << std::endl;}
};// 具体产品:Linux窗口实现
class LinuxWindowImpl : public WindowImpl {
public:void drawImpl() override {std::cout << "Drawing Linux Impl" << std::endl;}void resizeImpl() override {std::cout << "Resizing Linux Impl" << std::endl;}
};// 抽象工厂:窗口工厂接口
class WindowFactory {
public:virtual Window* createWindow() = 0;virtual WindowImpl* createWindowImpl() = 0;
};// 具体工厂:Windows窗口工厂
class WindowsWindowFactory : public WindowFactory {
public:Window* createWindow() override {return new WindowsWindow(createWindowImpl());}WindowImpl* createWindowImpl() override {return new WindowsWindowImpl();}
};// 具体工厂:Linux窗口工厂
class LinuxWindowFactory : public WindowFactory {
public:Window* createWindow() override {return new LinuxWindow(createWindowImpl());}WindowImpl* createWindowImpl() override {return new LinuxWindowImpl();}
};int main() {// 创建Windows窗口工厂WindowFactory* windowsFactory = new WindowsWindowFactory();// 使用Windows工厂创建窗口Window* windowsWindow = windowsFactory->createWindow();windowsWindow->draw();windowsWindow->resize();// 创建Linux窗口工厂WindowFactory* linuxFactory = new LinuxWindowFactory();// 使用Linux工厂创建窗口Window* linuxWindow = linuxFactory->createWindow();linuxWindow->draw();linuxWindow->resize();// 清理资源delete windowsFactory;delete windowsWindow;delete linuxFactory;delete linuxWindow;return 0;
}

代码说明

  1. Window:窗口接口,定义了 draw 和 resize 方法。
  2. WindowImpl:窗口实现接口,定义了 drawImpl 和 resizeImpl 方法。
  3. WindowsWindow 和 LinuxWindow:具体的窗口类,分别实现Windows和Linux系统的窗口。
  4. WindowsWindowImpl 和 LinuxWindowImpl:具体的窗口实现类,分别实现Windows和Linux系统的窗口实现。
  5. WindowFactory:抽象工厂接口,定义了 createWindow 和 createWindowImpl 方法。
  6. WindowsWindowFactory 和 LinuxWindowFactory:具体的工厂类,分别创建Windows和Linux系统的窗口及其对应的实现。
  7. main 函数:演示如何使用抽象工厂来创建和配置不同操作系统下的窗口。

通过这种方式,我们可以在不同的操作系统下创建和配置相应的窗口和实现,而不需要为每种操作系统创建大量的子类。


http://www.ppmy.cn/server/144807.html

相关文章

机器学习周志华学习笔记-第5章<神经网络>

机器学习周志华学习笔记-第5章<神经网络> 卷王&#xff0c;请看目录 5模型的评估与选择5.1 神经元模型5.2 感知机与多层网络5.3 BP(误逆差)神经网络算法 5.4常见的神经网络5.4.1 RBF网络&#xff08;Radial Basis Function Network&#xff0c;径向基函数网络&#xff0…

移动光猫[HS8545M5-10]获取超密

移动光猫[HS8545M5-10]获取超级密码 1、缘由2、前期准备2.1、确保本地开通telnet客户端功能2.2、准备好相关软件 3、开始查找超密 1、缘由 最近想折腾一下ipv6ddns打通内外网&#xff0c;查询资料说是需要将光猫桥接到外网&#xff1b;但是使用光猫后边的用户名密码根本就找不到…

kafka是如何做到高效读写

消息持久化&#xff1a; Kafka 将消息存储在磁盘上&#xff0c;并且通过顺序写入的方式提高写入性能。 消息被追加到日志文件的尾部&#xff0c;避免了随机写操作&#xff0c;从而提高了写入速度。零拷贝技术&#xff1a;利用操作系统的零拷贝特性&#xff0c;数据可以从磁盘直…

Spring Boot OA:构建企业级办公自动化平台

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足&#xff0c;创建了一个计算机管理企业OA管理系统的方案。文章介绍了企业OA管理系统的系统分析部…

使用LUKS对Linux磁盘进行加密

前言 本实验用于日常学习用&#xff0c;如需对存有重要数据的磁盘进行操作&#xff0c;请做好数据备份工作。 此实验只是使用LUKS工具的冰山一角&#xff0c;后续还会有更多功能等待探索。 LUKS&#xff08;Linux Unified Key Setup&#xff09;是Linux系统中用于磁盘加密的一…

【计算机网络】数据链路层

跨网络传输的本质&#xff1a;由许多局域网(子网)转发的结果 要彻底理解跨网络转发&#xff0c;首先要理解 -> 局域网中报文的转发原理&#xff01; ​​​​​​​ 一、以太网帧格式 1.报头的含义 源地址/目的地址&#xff1a;源MAC地址和目的MAC地址 帧协议类型&…

大语言模型---LoRA中损失值的计算

文章目录 概要损失计算流程小结 概要 Llama-7B模型的LoRA微调训练中&#xff0c;通过使用Cross-Entropy Loss来度量模型输出的预测分布和真实标签分布之间的距离&#xff0c;来衡量模型的准确性。 本文主要介绍LoRA中损失值的计算流程。 Cross-Entropy Loss作用&#xff1a;是…

Hadoop进阶原理(HDFS、MR、YARN的原理)

HDFS hdfs默认文件配置:https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml 为什么需要分布式存储&#xff1f; 假设文件有10T,此时文件太大&#xff0c;单台服务器无法承担。 为什么需要分布式存储&#xff1f; 数据量太大&#xff0c…