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

外观模式(大话设计模式)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;
}

总结

在这里插入图片描述

相关文章:

  • U-Net for Image Segmentation
  • 【系统架构设计师】二、操作系统知识(操作系统概述|进程管理)
  • 决策树学习
  • 非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
  • 2024.06.20【读书笔记】丨生物信息学与功能基因组学(第十六章 真核生物基因组 第三部分)【AI测试版】
  • 【CT】LeetCode手撕—42. 接雨水
  • 计算机网络(谢希仁第六版)| 课后习题与答案 | 物理层 | 题目知识点详细分析
  • sql常用的函数与代码示例
  • vlcplayer for android 源码编译log打印
  • JupyterLab使用指南(二):JupyterLab基础
  • C语言| 数组的折半查找
  • DM8的列存储HUGE表
  • java基于ssm+jsp 母婴用品网站
  • QT_day1
  • jnp.diag
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 2017-09-12 前端日报
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • JDK 6和JDK 7中的substring()方法
  • Js基础知识(一) - 变量
  • leetcode98. Validate Binary Search Tree
  • Redis 中的布隆过滤器
  • Spring Cloud Feign的两种使用姿势
  • Vim Clutch | 面向脚踏板编程……
  • webpack+react项目初体验——记录我的webpack环境配置
  • 好的网址,关于.net 4.0 ,vs 2010
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 强力优化Rancher k8s中国区的使用体验
  • 删除表内多余的重复数据
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ‌内网穿透技术‌总结
  • # 职场生活之道:善于团结
  • #知识分享#笔记#学习方法
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (web自动化测试+python)1
  • (翻译)terry crowley: 写给程序员
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一)基于IDEA的JAVA基础10
  • (一)基于IDEA的JAVA基础12
  • (转载)虚函数剖析
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 简单实现MD5
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET框架设计—常被忽视的C#设计技巧
  • .Net面试题4
  • .NET序列化 serializable,反序列化
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [.NET 即时通信SignalR] 认识SignalR (一)