当前位置: 首页 > news >正文

桥接模式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

桥接模式网上都讲得很复杂,我总结一下就是一句话:

如果多个维度变化,每个维度都有一个基类,嗯,就这样

#include <iostream>

using namespace std;

class Os {
  public:
    virtual void SetOs() = 0;
};

class LinuxOs : public Os {
  public:
    void SetOs() {
      cout<< "set linux" << endl;
    }
};
class WindowsOs : public Os {
  public:
    void SetOs() {
      cout<< "set windows" << endl;
    }
};

class MacOs : public Os {
  public:
    void SetOs() {
      cout<< "set mac" << endl;
    }
};


class Computer {
  public:
    Computer(Os* s) : os_(s) {
    }
    virtual ~Computer() {
      if (os_) {
        delete os_;
      }
      os_ = NULL;
    }
  public:
    virtual void InstallOs() = 0;
  protected:
    Os* os_;
};

class DellComputer : public Computer {
  public:
    DellComputer(Os* s) : Computer(s) {
    }
  public:
    void InstallOs() {
      cout<< "DellComputer:" << endl;
      os_->SetOs();
    }
};

class MacComputer : public Computer{
  public:
    MacComputer(Os* s) : Computer(s) {
    }
  public:
    void InstallOs() {
      cout<< "MacComputer:" << endl;
      os_->SetOs();
    }
};

class IbmComputer : public Computer{
  public:
    IbmComputer(Os* s) : Computer(s) {
    }
  public:
    void InstallOs() {
      cout<< "IbmComputer:" << endl;
      os_->SetOs();
    }
};
#include "main.h"

using namespace std;


int main(int argc, char* argv[]) {
  Computer* c = new DellComputer(new WindowsOs);
  c->InstallOs();
  Computer* c2 = new MacComputer(new MacOs);
  c2->InstallOs();
  Computer* c3 = new IbmComputer(new LinuxOs);
  c3->InstallOs();

}


转载于:https://my.oschina.net/hejiula/blog/309748

相关文章:

  • 记录一下第一次使用npm
  • 从头学Android系列
  • android linker
  • c++中输入输出流详解
  • JavaScript学习笔记(一)
  • 关于GRUB2
  • 演化理解 Android 异步加载图片
  • 棋牌游戏服务器架构: 总体设计
  • Python操作MySQL以及中文乱码的问题
  • Linux常用命令1
  • 图像增强---中值滤波
  • Exchange 2013 为DAG添加成员服务器,遇到的几个问题解决方法
  • [python] 之 装饰器
  • linux--dhcp服务器
  • 浪潮NF5280M3安装Windows Server 2008 R2注意事项
  • IOS评论框不贴底(ios12新bug)
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • js继承的实现方法
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Redis的resp协议
  • Travix是如何部署应用程序到Kubernetes上的
  • TypeScript实现数据结构(一)栈,队列,链表
  • XML已死 ?
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 仿天猫超市收藏抛物线动画工具库
  • 记一次用 NodeJs 实现模拟登录的思路
  • 技术发展面试
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 优化 Vue 项目编译文件大小
  • ​如何在iOS手机上查看应用日志
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Ubuntu(修改root信息)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $jQuery 重写Alert样式方法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (12)目标检测_SSD基于pytorch搭建代码
  • (30)数组元素和与数字和的绝对差
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (六)激光线扫描-三维重建
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)树状数组
  • .form文件_一篇文章学会文件上传
  • .NET Project Open Day(2011.11.13)
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net生成的类,跨工程调用显示注释
  • .NET文档生成工具ADB使用图文教程