建造者模式 和 外观模式

ops/2024/11/13 9:13:19/

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

建造者模式

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


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.ppmy.cn/ops/97201.html

相关文章

asp.net Core blazor学习笔记

最近在研究学习blazor&#xff0c;为了加深记忆&#xff0c;手动记录一下&#xff0c;以下内容为个人理解记录&#xff0c;仅供参考&#xff1a; Blazor开发学习 一 分类1 Blazor Server 应用2 Blazor WebAssembly 应用3 Blazor Hybrid 应用和 .NET MAUI 二 基础知识1 路由2 组…

嵌入式堆栈、ARM寄存器

栈里面存放的内容&#xff1a;局部变量和系统信息&#xff0c;函数调用链路也是系统信息的一环 ARM寄存器 LR&#xff1a;程序跳转的时候&#xff0c;返回到的地址就保存到此处 PC&#xff1a;程序计数器&#xff0c;pc 要执行的下一条指令地址&#xff0c;就存放在此处&#…

设计模式六大原则(四)--接口隔离原则

1. 简介 1.1. 概述 接口隔离原则(Interface Segregation Principle,简称ISP)是设计模式六大原则之一,它指出在一个系统中,应该尽量将接口拆分成更小、更具体的接口,避免出现过大、过于臃肿的接口。这个原则强调了接口的设计应该尽可能地符合“单一职责”原则,即每个接…

C# Unity 面向对象补全计划 之 Switch 表达式(c# 8.0++)

前置知识&#xff1a;lambda表达式&#xff0c;枚举与Switch&#xff08;传统语法&#xff09;C# & Unity 面向对象补全计划 之 匿名函数与Lambda表达式-CSDN博客 C# 8.0引入了 switch 表达式&#xff0c;是一个语法糖&#xff08;类的属性get set就是一种语法糖&#xff0…

ubuntu 安装node

安装node 由于项目使用node 16.x开发&#xff0c;因此在Jenkins上&#xff0c;安装node 16.x 使用curl下载NodeSource的安装脚本&#xff1a; curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - 安装Node.js&#xff1a; sudo apt-get install -y nodejs验证…

[Day 59] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的共識算法優化 前言 區塊鏈作為一種顛覆性的分布式賬本技術,其核心在於共識機制的設計。不同的共識算法如比特幣的工作量證明(Proof of Work, PoW)、以太坊的權益證明(Proof of Stake, PoS)以及其他如授權證明(Proof of Authority, PoA)、委託權益證明(Delegated Proof…

杭州百腾教育科技 TiDB 6.5 to 7.5 升级记录

作者&#xff1a; reAsOn2010 原文来源&#xff1a; https://tidb.net/blog/612103f3 背景 使用 TiDB 作为我们的全量数据库已经有六七年了&#xff0c;当时还是 2.0 版本。早期TiDB的迭代和新特性的发布对于实际使用的影响还是很大的&#xff0c;所以从那个时候开始就有每…

Windows Server 2012 R2服务器安装CVE-2024-38077补丁KB5040456的安装及问题解决

Windows 远程桌面授权服务远程代码执行漏洞CVE-2024-38077&#xff0c;该漏洞影响: 远程执行代码&#xff0c;漏洞最高严重性: 严重。本文记录了Windows Server 2012 R2服务器补丁KB5040456的安装及报错“此更新不适用于你的计算机”的问题解决过程。 一、漏洞相关信息 1.影响…