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

建造者模式 和 外观模式

这两种模式很像, 都是将一个复杂的流程统一用一个方法进行包装, 方便外界使用.
建造者模式更像是 外观模式的一种特里, 只对一个类的复杂初始化流程进行包装

建造者模式

简介: 就是一个类的构造方法可能很复杂, 由于系统的限制等原因, 可能很多初始化逻辑不能放在构造函数里, 所以就需要一个类来统一这种构建流程, 让外界不需要知道具体的复杂构造逻辑, 就能获取目标类的实例.
代码


class Building
{
private:string foundation;string main_wall;string floor;
public:Building() {};void build_foundation() { cout << "must be first step" << endl;foundation = "create_foundation"; }void build_main_wall() { cout << "must be second step" << endl;main_wall = "build main wall"; }void build_floor() { cout << "must be third step" << endl;floor = "build floor"; }// 声明为友元函数, 可以访问私有变量friend ostream& operator << (ostream& os, const Building* b);
};ostream& operator << (ostream& os, const Building* b)
{os << b->foundation << "," << b->main_wall << "," << b->floor << endl;return os;
}class Builder
{
public:Builder() {};Building* build_building(){Building* b = new Building();b->build_foundation();b->build_main_wall();b->build_floor();return b;}
};int main()
{Builder* builder = new Builder();Building* building= builder->build_building();cout << building << endl;return 0;
}

执行结果
在这里插入图片描述

外观模式

简介: 外观模式: 一般情况下, 都是因为老系统比较负责, 用一个类统一包装一下业务逻辑, 方便新系统使用
比如打车到某个地方, 分为三个部分, 然后用一个方法统一执行这些步骤, 统一打车的业务逻辑
1: 网络约车
2: 验证手机尾号
3: 驾驶员驾驶汽车到达目的地
4: 付款

代码

class SystemCallCar
{
public:void run() { cout << "call car" << endl; }
};class SystemVertifyPhone
{
public:void run() { cout << "vertify phone" << endl; }
};class ReachTargetPlace
{
public:void run() { cout << "drive car reach target place"; }
};class Pay
{
public:void run() { cout << "pay money" << endl; }
};class Face
{
public:void run(){SystemCallCar* s1 = new SystemCallCar();SystemVertifyPhone* s2 = new SystemVertifyPhone();ReachTargetPlace* s3 = new ReachTargetPlace();Pay* s4 = new Pay();s1->run();s2->run();s3->run();s4->run();}
};int main()
{Face f;f.run();return 0;
}

执行结果
在这里插入图片描述


http://www.mrgr.cn/news/1119.html

相关文章:

  • C知识扫盲------文件的基本操作
  • RCE---eval长度限制绕过技巧
  • 源头分析: 网络安全的分布式方法
  • 基于大模型 Prompt + LangChain 架构的 AI 翻译系统全流程解析
  • AI学习记录 - Word2Vec 超详细解析
  • c++进阶——继承的定义,复杂的菱形继承及菱形虚拟继承
  • JZ51 数组中的逆序对
  • HarmonyOS 开发
  • 设计模式 建造者模式
  • C++ //练习 18.6 已知下面的异常类型和catch语句,书写一个throw表达式使其创建的异常对象能被这些catch语句捕获:
  • 非关系型数据库MongoDB(文档型数据库)介绍与使用实例
  • 安装Pentaho Data Integration并启动
  • C++入门——08list
  • Flutter-->使用dart编写蒲公英上传脚本
  • 七大排序算法
  • 基于飞腾平台的Hadoop的安装配置
  • 智慧水务项目(七)vscode 远程连接ubuntu 20.04 服务器,调试pyscada,踩坑多多
  • BOOST c++库学习 之 boost.mpi库入门实战指南 以及 使用 boost.mpi库实现进程间通讯(同步与异步的对比)的简单例程
  • Nuxt3【详解】资源引用 vs 添加样式(2024最新版)
  • EmguCV学习笔记 VB.Net和C# 下的OpenCv开发 C# 目录