首页 > 其他分享 >建造者模式 和 外观模式

建造者模式 和 外观模式

时间:2024-08-19 21:27:02浏览次数:9  
标签:Building 外观 run cout void 建造 模式 new public

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

建造者模式

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


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;
}

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

标签:Building,外观,run,cout,void,建造,模式,new,public
From: https://blog.csdn.net/qq_40666620/article/details/141325611

相关文章

  • 工厂模式
    工厂模式核心本质:实例化对象不使用new,用工厂方法创建对象使用工厂统一管理对象的创建,将调用者跟实现类解耦三种模式:简单工厂模式建立一个工厂类,对实现了同一接口的一些类进行实例的创建。优点是比较好理解,简单易操作。缺点是类的创建依赖工厂类,如果想要拓展程序,必须对......
  • C# x Unity面向对象补全计划 设计模式 之 实现一个简单的有限状态机
    一个简单的有限状态机可以有如下内容1.状态基类(定义基本状态的方法,如进入(Enter)、执行(Execute)和退出(Exit),同时可以在此声明需要被管理的对象)2.具体状态类(定义具体状态,如:跳跃,行走,待机,每个具体状态类继承自状态基类)3.管理状态类(负责管理状态的切换逻辑,确保在不同状态之间进行......
  • 设计模式六大原则(二)--开闭原则
    1.简介1.1.概述开闭原则(Open/ClosedPrinciple,简称OCP)是软件设计原则中的一个重要原则,它指出:“软件实体(如类、模块、函数等)应该对扩展开放,对修改封闭。”这意味着我们应该设计出这样的软件实体,它们可以在不改变原有代码的基础上进行扩展和修改。开闭原则的核心思想是将......
  • PyCharm社区版配置Django 项目Debug模式配置
    1、编辑Django项目运行配置 2、选择python,点击添加 3、设置相关参数 ......
  • MySQL 安装与配置教程:单机、主从复制与集群模式
    目录MySQL简介MySQL安装MySQL基础配置MySQL主从复制配置MySQL集群配置总结1.MySQL简介MySQL是一个广泛使用的关系型数据库管理系统,具有高性能、高可靠性和易用性等特点。它支持多种部署模式,包括单机模式、主从复制模式(用于高可用性和读写分离)以及集群模式(用于分......
  • Redis 安装与配置教程:单机、哨兵模式与集群模式
    目录Redis简介Redis安装Redis单机配置Redis哨兵模式配置Redis集群模式配置总结1.Redis简介Redis是一个开源的键值对存储系统,支持丰富的数据结构,如字符串、哈希、列表、集合等。它被广泛用于缓存、会话存储、实时分析等场景。Redis提供了多种部署模式,包括单机模......
  • redis 哨兵模式开启方案
    哨兵模式一、配置sentinel模式二、测试sentinel日志输出的状态信息环境准备准备三台系统为CentOS7的主机master:192.168.152.71slave1:192.168.152.72slave2:192.168.152.73.哨兵模式的介绍:Redis哨兵模式(RedisSentinel)用于提供高可用性和监控功能,主要......
  • uniapp页面分栏模式,如何设置,与开发
    目录配置分栏设置第一种,响应式,用媒体查询,在不同屏幕下的font-size的大小改变,不是很精准的等比例放大第二种,单位使用vw,vh,能够达到屏幕的自适应。(比较推荐使用)配置分栏设置第一种,响应式,用媒体查询,在不同屏幕下的font-size的大小改变,不是很精准的等比例放大第二种,单......
  • C++实现设计模式——Builder模式
    C++实现设计模式——Builder模式建造者模式定义建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品......
  • 在 C# 中处理 HttpClient 实例时,使用单例模式和 IHttpClientFactory,DNS缓存问题
    在C#中处理HttpClient实例时,使用单例模式和IHttpClientFactory都有各自的优缺点,尤其是在高并发情况下。以下是它们的对比及性能考虑:1.单例模式使用HttpClient优势:减少资源消耗:HttpClient是设计为复用的类,创建一个单例可以避免频繁创建和销毁HttpClient实例,从而减......