《业务代表模式(极简c++)》

        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客

模式说明

  • 方案: 业务代表模式将对特定业务的访问逻辑封装在一个代表对象中,客户端通过代表对象访问业务,而无需了解具体的业务逻辑。
  • 优点:
    • 将业务访问逻辑与客户端分离,提高了系统的可维护性和可扩展性。
    • 减少了客户端与业务逻辑的耦合,降低了修改业务逻辑时对客户端的影响。
  • 缺点:
    • 增加了系统中的对象数量,可能导致系统复杂度的提升。
    • 如果业务变化频繁,可能需要频繁修改业务代表对象,增加维护成本。

本质思想:通过引入一个代表对象,将客户端与具体业务逻辑解耦,实现业务访问的统一管理。

实践建议:和策略模式没有本质的区别,都是隔离调用者和多个可能被调用者的方式。只是被调用者是算法模块,还是业务模块

代码示例

#include <iostream>
#include <memory> // For std::shared_ptr// 基类:鸟
class Bird {
public:virtual void fly() const = 0;
};// 派生类:鸽子
class Pigeon : public Bird {
public:void fly() const override {std::cout << "Pigeon flies at a medium speed.\n";}
};// 派生类:鹦鹉
class Parrot : public Bird {
public:void fly() const override {std::cout << "Parrot flies at a high speed.\n";}
};// 业务代表类:鸟代表
class BirdProxy {
private:std::shared_ptr<Bird> bird_;public:void setBird(std::shared_ptr<Bird> bird) {bird_ = bird;}void performFly() const {if (bird_) {bird_->fly();} else {std::cout << "No bird is set.\n";}}
};int main() {BirdProxy proxy;proxy.performFly(); // Output: No bird is set.// 设置鸽子proxy.setBird(std::make_shared<Pigeon>());proxy.performFly(); // Output: Pigeon flies at a medium speed.// 设置鹦鹉proxy.setBird(std::make_shared<Parrot>());proxy.performFly(); // Output: Parrot flies at a high speed.return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】简易版扫雷+进阶版扫雷

目录 前言 一、分模块化 二、准备雷盘 2.1 游戏菜单 2.2 创建雷盘思路 2.3 构建雷盘 2.4 雷盘展示 2.4.1 初始化雷盘 2.4.2 打印雷盘 三、排雷 3.1 布置雷 3.2 排查雷 四、进阶版扫雷 总结 前言 C语言实现扫雷小游戏&#xff0c;帮我们更进一步的掌握数组、模块化…

Windows Server 2016虚拟机安装教程

一、VMware Workstation虚拟机软件的下载 官网下载入口&#xff1a;​​​​​​Download VMware Workstation Pro - VMware Customer Connect​​​​​ 下载好之后自己看着提示安装软件就好. 二、镜像文件的下载 下载网站入口&#xff1a;MSDN, 我告诉你 - 做一个安静…

Docker搭建Kanzi

Kanzi是一个虚拟形象产品&#xff0c;它具有丰富的自定义和交互能力&#xff0c;例如捏脸、换装、同步音乐动作、声源定位转向等。Kanzi的Docker镜像允许用户在容器化环境中部署和运行这些虚拟形象&#xff0c;为开发者和企业提供了便捷的解决方案。 Kanzi Docker镜像的功能 …

【Java EE】Spring核心思想(一)——IOC

文章目录 &#x1f38d;Spring 是什么&#xff1f;&#x1f384;什么是IoC呢&#xff1f;&#x1f338;传统程序开发&#x1f338;传统程序开发的缺陷&#x1f338;如何解决传统程序的缺陷&#xff1f;&#x1f338;控制反转式程序开发&#x1f338;对比总结 &#x1f332;理解…

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念&#xff1a; 位&#xff08;Bit&#xff09; 计算机中最小的数据单位&#xff0c;一位有0、1两状态。Bit是计算机中最小…

MySQL优化表,表的碎片整理和空间回收,清理空间

1.sql -- 查看表占用空间大小。简单查询可以用show table status like blog_visit; select data_length, index_length, data_free, o.* from information_schema.tables o where table_schema in (lishuoboy-navigation) and table_nameblog_visit order by data_length des…

计算机服务器中了rmallox勒索病毒怎么办,rmallox勒索病毒解密流程步骤

在企业的生产运营过程中网络发挥着巨大作用&#xff0c;利用网络可以拓宽市场&#xff0c;提高办公效率&#xff0c;网络为企业的生产运营提供了极大便利&#xff0c;但也为企业的数据安全带来隐患。近日&#xff0c;云天数据恢复中心接到多家企业的求助&#xff0c;企业的计算…

使用 Verdaccio 私有化 npm 源指南

使用 Verdaccio 私有化 npm 源指南 使用 Verdaccio 私有化 npm 源指南 介绍什么是 Verdaccio为什么选择 Verdaccio部署 Verdaccio Nodejs 部署 全局局部 Docker 部署云服务商一键部署 注册用户发布私有 npm 包管理 npm 包项目使用私有源 全量切换部分切换 结尾源代码链接 介…

网络篇10 | 网络层 IP

网络篇10 | 网络层 IP 01 简介02 名称解释03 IP报文格式(IPv4)1&#xff09;4位版本协议(version)2&#xff09;4位首部长度(header length)3&#xff09;8位服务类型(Type Of Service, TOS)4&#xff09;16位总长度5&#xff09;16位(分片)标识6&#xff09;3位(分片)标志7&am…

【Java】Spring的概述

什么是Spring 据度娘所载&#xff1a;Spring是一个开源框架&#xff0c;Spring是于2003年兴起的一个轻量级的Java开发框架&#xff0c;由Rod Johnson创建。简单来说&#xff0c;Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。 Spring的核心是控制反转(IoC)和…

4.14日网络编程学习

1.网络编程三要素 1.IP地址&#xff1a; IP地址&#xff1a;指互联网协议地址&#xff08;Internet Protocol Address&#xff09;&#xff0c;俗称IP。要想使网络中的计算机能够进行通信&#xff0c;必须为每台计算机指定一个标识号&#xff0c;通过这个标识号来指定接受数据…

Java基础习题及参考代码(数组)

二白整理了一些关于数组的习题&#xff0c;本人也逐个完成&#xff0c;有需要的同学自取&#xff0c;答案仅供参考。 01&#xff1a;对10个整数进行按照从小到大的顺序排序 package Practise;/*** JdkVersion: 17* Author: 二白程序员* Date 2024/4/8 13:24* QQ&#xff1a;…

MySQL-触发器

一、概述&#xff1a; Ⅰ、触发器是由 事件来触发 某个操作&#xff0c;这些事件包括 INSERT 、 UPDATE 、 DELETE 事件。就是指 用户的动作或者触发某项行为。如果定义了触发程序&#xff0c;当数据库执行这些语句时候&#xff0c;就相当于事件发生 了&#xff0c;就会 自动 …

Spring Cloud 集成 RabbitMQ

目录 前言步骤引入相关maven依赖添加相关配置 使用方法配置消息序列化创建第一个消息队列和交换机使用方法 总结 前言 在当今的微服务架构盛行的时代&#xff0c;消息队列作为一种重要的通信机制&#xff0c;在分布式系统中扮演着不可或缺的角色。RabbitMQ&#xff0c;作为一款…

ASP.NET公交车管理系统的实现与设计

摘 要 随着经济的日益增长&#xff0c;信息化时代已经到来&#xff0c;生活中各种信息趋向数字化、清晰化。公交车作为现代城市生活中一种重要的交通工具&#xff0c;其数量增多&#xff0c;车型也不再单一&#xff0c;雇用的司机增多&#xff0c;这样使得公交车公司的车辆信…

XTTS数据迁移方案

前置条件检查 XTTS使用限制较多&#xff0c;V3版本按照本节逐项检查 目标库操作系统不能是windows 源库&#xff1a;redhut 7.9 目标库&#xff1a;redhut 7.9 检查数据库时区&#xff08;两边都需要&#xff09; SQL> select dbtimezone from dual; 检查结果两边都一致…

系统架构设计与优化的几个关键点

1. 业务理解与需求分析 业务场景梳理&#xff1a;深入理解业务流程、业务规则、用户行为模式等&#xff0c;明确系统需要支持的核心功能和应用场景。非功能性需求识别&#xff1a;关注性能指标&#xff08;如响应时间、并发处理能力、数据吞吐量等&#xff09;、可用性要求&am…

机器学习和深度学习--李宏毅 (笔记与个人理解)Day 16

Day 16 deep Learning – 鱼与熊掌兼得 最近在减重&#xff0c; 昨天跑了个一公里&#xff0c;然后今天上午又打了个篮球&#xff0c;真是老胳膊老腿了&#xff0c;运动完给我困得不行 Review 见前面的笔记 这里说dl 会提供一个足够大的模型&#xff0c; 来使得Dall loss 足够小…

创业之路:从市场洞察到产品实现的全方位指南

创业是一项挑战性的旅程&#xff0c;需要综合考虑市场、产品、技术、团队等多个方面。在这篇文章中&#xff0c;我们将深入探讨如何更好地进行创业&#xff0c;从市场分析到产品实现的各个环节。 深入市场洞察 在创业之前&#xff0c;深入了解目标市场是至关重要的。我们需要…

Unity类银河恶魔城学习记录12-14 p136 Merge Skill Tree with Sword skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections.…