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

大话设计模式解读08-外观模式

上篇文章,介绍了《大话设计模式》的第10章——模板方法。

本篇,来介绍《大话设计模式》的第12章——外观模式。并通过C++代码实现实例代码的功能。

注:第11章介绍的是迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用

1 外观模式

外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式的类图如下:

  • Facade:外观类,对子系统进行管理,对接客户端。
  • SubSystem:子系统类,实现子系统的功能,处理外观类指派的任务。

2 实例

背景:书中小故事,股市行情很火,小菜的一些同事在炒股票,但大多是刚入市的,什么都不懂,其中一个叫顾韵梅的同事,在大大好的牛市行情里,却连连亏损。哈,典型的新股民特征。还是要找懂行的人,基金经理。

题目:用代码的形式来实现自己操作股票以及基金经理操作股票。

2.1 版本一:自己操作股票

版本一的实现就是定义一些股票类,提供买入和卖出的接口,然后客户自己操作买入和卖出。

2.1.1 股票类

股票类的实现如下,这里以股票1、股票2和国债1进行示例:

// 股票1
class Stock1
{
public:void Buy(){printf("股票1买入\n");}   void Sell(){printf("股票1卖出\n");}     
};// 股票2
class Stock2
{
public:void Buy(){printf("股票2买入\n");}   void Sell(){printf("股票2卖出\n");}     
};// 国债1
class NationDebt1
{
public:void Buy(){printf("国债1买入\n");}   void Sell(){printf("国债1卖出\n");}     
};

2.1.2 主函数

首先,实例化对应的股票,

然后,就可以调用对应的买入和卖出的接口了。

int main()
{Stock1 stock1;Stock2 stock2;NationDebt1 nationDebt1;stock1.Buy();stock2.Buy();nationDebt1.Buy();stock1.Sell();stock2.Sell();nationDebt1.Sell();return 0;
}

代码运行效果如下:

2.2 版本二:基金经理操作股票

版本一的实现比较简单,是客户自己操作股票,对于新手股民,可能一顿操作猛如虎,一看收益二百五。如果通过购买基金,由基金经理来操作股票,收益结果可能不同。

修改后的代码如下:

// 基金
class Fund
{
public:void Buy(){printf("基金操作买入:\n");m_stock1.Buy();m_stock2.Buy();m_nationDebt1.Buy();}   void Sell(){printf("基金操作卖出:\n");m_stock1.Sell();m_stock2.Sell();m_nationDebt1.Sell();}   private:Stock1 m_stock1;Stock2 m_stock2;NationDebt1 m_nationDebt1;     
};int main()
{Fund fund;fund.Buy();fund.Sell();return 0;
}

运行效果如下:

总结

本篇介绍了设计模式中的外观模式,并通过购买股票和基金的实例,使用C++编程,来演示外观模式的使用。


http://www.mrgr.cn/news/53813.html

相关文章:

  • Scala内部类和Java内部类的不同
  • 【The Art of Unit Testing 3_自学笔记02】第二章:编写第一个单元测试(上)
  • 【服务器部署】Nodejs环境搭建
  • 在wpf 中 用mvvm 的方式 绑定 鼠标事件
  • ANSYS Workbench纤维混凝土3D
  • 利用飞腾派进行OpenCV开发
  • python 函数
  • 嘉兴自闭症咨询全托机构:全面支持孩子成长的专业团队
  • 如何让审批更加的省钱?
  • 什么是DevOps,如何才能获取DevOps相关实践
  • 石墨烯磁表面等离子体
  • 对接金蝶云星空存货档案到MES系统的详细步骤及javajs动态脚本拉取的实现
  • 【C++初阶】一文讲通默认成员函数~类和对象(中)
  • Java项目-基于springboot框架的社区疫情防控平台系统项目实战(附源码+文档)
  • 【MySQL】设置二进制日志文件自动过期,从根源上解决占满磁盘的问题:通过修改 binlog_expire_logs_seconds 配置项
  • 使用C语言实现一个任务调度系统
  • 现代数字信号处理I-P4 CRLB+LMMSE 学习笔记
  • Olap数据处理
  • 智慧社区Web平台:Spring Boot技术实现
  • 高级SQL技巧:掌握数据分析与优化的艺术
  • 自由学习记录(10)
  • 【win11】终端/命令提示符/powershell美化
  • ProteinMPNN中EncLayer类介绍
  • 软件设计的依赖反转原则
  • 这种V带的无极变速能用在新能源汽车上吧?
  • Python配合Yolov11开对象检测训练软件