外观模式(大话设计模式)C/C++版本

外观模式

在这里插入图片描述

C++

#include <iostream>
using namespace std;class stock1
{
public:void Sell(){cout << "股票1卖出" << endl;}void Buy(){cout << "股票1买入" << endl;}
};class stock2
{
public:void Sell(){cout << "股票2卖出" << endl;}void Buy(){cout << "股票2买入" << endl;}
};class stock3
{
public:void Sell(){cout << "股票3卖出" << endl;}void Buy(){cout << "股票3买入" << endl;}
};class NationalDebt1
{
public:void Sell(){cout << "国债1卖出" << endl;}void Buy(){cout << "国债1买入" << endl;}
};class Realty1
{
public:void Sell(){cout << "房地产1卖出" << endl;}void Buy(){cout << "房地产1买入" << endl;}
};class Fund
{
private:stock1* gupiao1;stock2* gupiao2;stock3* gupiao3;NationalDebt1* guozhai;Realty1* fangdichan;public:Fund(){gupiao1 = new stock1();gupiao2 = new stock2();gupiao3 = new stock3();guozhai = new NationalDebt1();fangdichan = new Realty1();}void BuyFund(){gupiao1->Buy();gupiao2->Buy();gupiao3->Buy();guozhai->Buy();fangdichan->Buy();}void SellFund(){gupiao1->Sell();gupiao2->Sell();gupiao3->Sell();guozhai->Sell();fangdichan->Sell();}
};int main()
{Fund *jijin = new Fund();jijin->BuyFund();cout << endl << "Two years later......\n" << endl;jijin->SellFund();return 0;
}

C

#include <stdio.h>
#include <stdlib.h>typedef struct
{void (*Sell)();void (*Buy)();
} Invest;typedef struct
{Invest base;
} Stock;/**********************************************************/
void Stock1_Sell()
{printf("股票1卖出\n");
}void Stock1_Buy()
{printf("股票1买入\n");
}Stock *createStock1()
{Stock *s = (Stock *)malloc(sizeof(Stock));s->base.Sell = Stock1_Sell;s->base.Buy = Stock1_Buy;return s;
}
/**********************************************************/
typedef struct
{Invest base;
} Stock2;void Stock2_Sell()
{printf("股票2卖出\n");
}void Stock2_Buy()
{printf("股票2买入\n");
}Stock2 *createStock2()
{Stock2 *s = (Stock2 *)malloc(sizeof(Stock2));s->base.Sell = Stock2_Sell;s->base.Buy = Stock2_Buy;return s;
}
/**********************************************************/
typedef struct
{Invest base;
} Stock3;void Stock3_Sell()
{printf("股票3卖出\n");
}void Stock3_Buy()
{printf("股票3买入\n");
}Stock3 *createStock3()
{Stock3 *s = (Stock3 *)malloc(sizeof(Stock3));s->base.Sell = Stock3_Sell;s->base.Buy = Stock3_Buy;return s;
}
/**********************************************************/
typedef struct
{Invest base;
} NationalDebt1;void NationalDebt1_Sell()
{printf("国债1卖出\n");
}void NationalDebt1_Buy()
{printf("国债买入\n");
}NationalDebt1 *createNationalDebt1()
{NationalDebt1 *s = (NationalDebt1 *)malloc(sizeof(NationalDebt1));s->base.Sell = NationalDebt1_Sell;s->base.Buy = NationalDebt1_Buy;return s;
}
/**********************************************************/
typedef struct
{Invest base;
} Realty1;void Realty1_Sell()
{printf("房地产卖出\n");
}void Realty1_Buy()
{printf("房地产3买入\n");
}Realty1 *createRealty1()
{Realty1 *s = (Realty1 *)malloc(sizeof(Realty1));s->base.Sell = Realty1_Sell;s->base.Buy = Realty1_Buy;return s;
}
/**********************************************************/
typedef struct
{Stock *gupiao1;Stock2 *gupiao2;Stock3 *gupiao3;NationalDebt1 *guozhai;Realty1 *fangdichan;
} Fund;Fund *createFund()
{Fund *fund = (Fund *)malloc(sizeof(Fund));fund->gupiao1 = createStock1();fund->gupiao2 = createStock2();fund->gupiao3 = createStock3();fund->guozhai = createNationalDebt1();fund->fangdichan = createRealty1();return fund;
}void BuyFund(Fund *fund)
{fund->gupiao1->base.Buy();fund->gupiao2->base.Buy();fund->gupiao3->base.Buy();fund->guozhai->base.Buy();fund->fangdichan->base.Buy();
}void SellFund(Fund *fund)
{fund->gupiao1->base.Sell();fund->gupiao2->base.Sell();fund->gupiao3->base.Sell();fund->guozhai->base.Sell();fund->fangdichan->base.Sell();
}int main()
{Fund *jijin = createFund();BuyFund(jijin);printf("\nTwo years later...\n\n");SellFund(jijin);free(jijin->gupiao1);free(jijin->gupiao2);free(jijin->gupiao3);free(jijin->guozhai);free(jijin->fangdichan);free(jijin);return 0;
}

总结

在这里插入图片描述

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

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

相关文章

el-cascader 支持多层级,多选(可自定义限制数量),保留最后一级

多功能的 el-cascader 序言&#xff1a;最近遇到一个需求关于级联的&#xff0c;有点东西&#xff0c;这里是要获取某个产品类型下的产品&#xff0c;会存在产品类型和产品在同一级的情况&#xff0c;但是产品类型不能勾选&#xff1b; 情况1&#xff08;二级菜单是产品&…

【杂记-浅谈等价路由】

浅谈等价路由 一、等价路由概述二、等价路由的特点1、负载均衡2、链路备份3、路由收敛快 三、等价路由的应用场景四、等价路由的配置与优化五、等价路由的挑战与发展 一、等价路由概述 Equal-Cost Multipath Routing&#xff0c;简称ECMP&#xff0c;即等价路由&#xff0c;指…

干货分享——AB站帮你解决独立站收款难题

目前&#xff0c;国内已经有抖音、拼多多和淘宝平台推出“仅退款”售后服务&#xff0c;无疑是加剧了原本就在疯狂打价格战的国内电商的严峻现状&#xff0c;使得商家不得不担心被顾客“薅羊毛”。在国内电商环境严重“内卷”的情况下&#xff0c;拓宽海外市场不失为一大妙计。…

【mysql】排错和调优

通用的一些排错方法。 1、查看进程信息 mysql> show full processlist;mysql> show processlist; 2、information_schema information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名&#xff0c;数据库的表&#xff0c;表栏的数据类型与访问权限等。…

DDP算法之反向传播(Backward Pass)

DDP算法反向传播 在DDP(Differential Dynamic Programming)算法中,反向传播(Backward Pass)是关键步骤之一。这个步骤的主要目的是通过动态规划递归地计算每个时间步上的值函数和控制策略,以便在前向传播(Forward Pass)中使用。 反向传播的目标 反向传播的主要目标是…

AD层次原理图绘制

一、在原理图中添加端口 二、添加层次图 三、更新层次图 四、也可以先画层次图&#xff0c;再绘制原理图&#xff0c;这里就不做演示了

vue3+ts 使用vue3-ace-editor实现Json编辑器

1、效果图 输入代码&#xff0c;点击格式化就出现以上效果&#xff0c;再点击压缩&#xff0c;是以下效果2、安装 npm i vue3-ace-editor 3、使用 新建aceConfig.js文件 // ace配置&#xff0c;使用动态加载来避免第一次加载开销 import ace from ace-builds// 导入不同的主…

Stable Diffusion 原理说明(好文推荐)

知乎-万字长文 https://zhuanlan.zhihu.com/p/669570827 腾讯云-动机说明 03&#xff1a;一文搞懂stable diffusion扩散去噪原理&#xff0c;玩转AI绘画-腾讯云开发者社区-腾讯云 百度安全验证

快速定制新人入职,可以自动回答知识库问题的机器人 | Chatopera

定制智能对话机器人&#xff0c;比如我是 HR&#xff0c;想要做一个聊天机器人&#xff0c;帮助新人入职&#xff0c;自动回答知识库的问题。 注册 Chatopera 云服务 首先&#xff0c;您需要一个 Chatopera 云服务账户&#xff0c;然后根据下面四个步骤实现。 服务注册地址&…

UnityAPI学习之碰撞检测与触发检测

碰撞检测 发生碰撞检测的前提&#xff1a; 1. 碰撞的物体需要有Rigidbody组件和boxcllidder组件 2. 被碰撞的物体需要有boxcollider组件 示例1&#xff1a;被碰撞的物体拥有Rigidbody组件 两个物体会因为都具有刚体的组件而发生力的作用&#xff0c;如下图所示&#xff0c…

Solus Linux: 有自己的软件包管理器

Solus Linux 是一个独立的 Linux 发行版&#xff0c;它以简单易用和现代化的用户体验而著称。Solus Linux 使用的包管理器是 eopkg&#xff0c;它具有以下优势和特点&#xff1a; 用户友好的界面&#xff1a;eopkg 提供了一个简洁直观的命令行界面&#xff0c;使得用户可以轻松…

创建一个electron桌面备忘录

Sound Of Silence 1.创建electron项目命令&#xff1a; npm create quick-start/electron my-new-project 2选择&#xff1a;√ Select a framework: vue √ Add TypeScript? ... No √ Add Electron updater plugin? ... Yes √ Enable Electron download mirror proxy? .…

hutool相关base64图片处理工具类

引入maven <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.4</version> </dependency>工具类 package com.db.common.utils.image;import cn.hutool.core.img.ImgUtil;import j…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 身高差值排序(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

22种常用设计模式示例代码

文章目录 创建型模式结构型模式行为模式 仓库地址https://github.com/Xiamu-ssr/DesignPatternsPractice 参考教程 refactoringguru设计模式-目录 创建型模式 软件包复杂度流行度工厂方法factorymethod❄️⭐️⭐️⭐️抽象工厂abstractfactory❄️❄️⭐️⭐️⭐️生成器bui…

如何配置node.js环境

文章目录 step1. 下载node.js安装包step2. 创建node_global, node_cache文件夹step3.配置node环境变量step3. cmd窗口检查安装的node和npm版本号step4. 设置缓存路径\全局安装路径\下载镜像step5. 测试配置的nodejs环境 step1. 下载node.js安装包 下载地址&#xff1a;node.js…

[程序员] openstack: openvswitch: firewall丢包

最近看到一个老问题&#xff1a;说openvswitch提供的防火墙策略&#xff0c;会导致网络性能下降&#xff0c;而且有丢包。 https://bugzilla.redhat.com/show_bug.cgi?id1559604 the firewalling changed and the firewall_driver is now ‘openvswitch’ ([security_groups…

application/x-www-form-urlencoded和json的区别

application/x-www-form-urlencoded 和 application/json 是两种不同的数据格式&#xff0c;常用于HTTP请求中传递数据。 它们各自的特点和使用场景如下&#xff1a; 1. application/x-www-form-urlencoded •特点&#xff1a;这是一种传统的表单提交时采用的编码类型&#x…

24年新版!这份Excel+Python飞速搞定数据分析手册,简直可以让Excel飞起来

前⾔ 微软在 UserVoice 上运营着⼀个反馈论坛&#xff0c;每个⼈都可以在这⾥提交新点⼦供他⼈投票。票数最⾼的功能请求是“将 Python 作为Excel 的⼀门脚本语⾔”&#xff0c;其得票数差不多是第⼆名的两倍。尽管⾃2015 年这个点⼦发布以来并没有什么实质性进展&#xff0c;…