三层架构:业务逻辑层、抽象层、实现层
原则:依赖倒转
案例一:动物园
设计实现:
- 抽象层:Animal
提供接口 voice - 实现层:Dog、Cat
分别实现 voice ,发出不同的声音 - 业务层:main 函数调用,只通过 Animal 的指针统一实现业务
案例二:编写一个 C++ 程序, 计算程序员( programmer )工资
- 要求能计算出初级程序员( junior_programmer ) 中级程序员 ( mid_programmer )高级程序员( adv_programmer )的工资
- 要求利用抽象类统一界面,方便程序的扩展,比如:新增,计算架构师( architect ) 的工资
设计实现:
- 抽象层:Programmer
提供计算工资的接口 - 实现层:JuniorProgrammer、MidProgrammer、AdvProgrammer
分别对计算工资接口进行实现 - 业务层:通过 Programmer 类统一管理,实现业务逻辑,同时业务的可扩展性更强,如新增架构师类型
案例三:电脑组装,面向抽象层编程
- 组装电脑有 3 个抽象类,抽象的 cpu,抽象的显卡,抽象的内存。
- 现在要求组装两台电脑,一台是 Intel 的 CPU,Intel 的显卡和 Intel 的内存。另一台是 Intel 的 CPU、Nvidia 的显卡和 Kingston 的内存条。
- 针对抽象层编程。
设计实现:
- 抽象层:CPU、Card、Storage 三个抽象类和一个组合类 Computer
- 实现层:IntelCPU、IntelCard、IntelStorage、NvidiaCard、KingstonStorage 派生类
- 业务层:创建两个 Computer 实例
案例四:几何图形
- 设计一个基类 Shape 包含成员函数 Show(), 将 Show() 声明为纯虚函数。
- Shape 类公有派生矩形类 Square(正方形)和圆类 Circle(圆形)
- 分别定义 Show() 实现其主要集合元素的显示。使用抽象类 Shape 类型的指针,当它指向某个派生类的对象时,就可以通过访问该对象的虚函数成员 Show()
- 用 ShowArea() 分别显示各种图形的面积.最后还要显示所有图形的各个面积。要求积累指针数组,数组的每个元素指向一个派生类对象。
设计实现:
- 抽象层:Shape 抽象类,有 Show() 和 ShowArea() 两个纯虚函数
- 实现层:Square、Circle 派生类,分别拥有自己的属性,并实现基类纯虚函数
- 业务层:通过 Shape 指针数组管理
案例五:企业员工信息管理系统
- 某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。
- 现在需要存储这些人员的姓名、编号、级别、当月薪水。计算月薪总额并显示全部信息。
- 人员编号基数为 1000,每输入一个人员信息编号顺序加 1。
- 程序要有对所有人员提升级别的功能。本例中为简单起见,所有人员的初始级别均为 1 级。然后进行升级,经理升为 4 级,技术人员和销售经理升为 3 级,推销员仍为1级。
- 月薪计算办法是: 经理拿固定月薪 8000 元;技术人员按每小时 100 元领取月薪; 推销员的月薪按该推销员当月销售额的 4% 提成;销售经理既拿固定月薪也领取销售提成,固定月薪为 5000 元,销售提成为所管辖部门当月销售总额的 5%。
设计实现:
- 抽象层:Employee,拥有姓名、编号、级别、当月薪水基础属性,并提供 pay()、displayStatus() 两个纯虚函数(接口)
- 实现层:Technician、Manager、Salesman,SalesManager 虚继承于 Manager、Salesman,且分别有自己的特有属性
- 业务层:分别显示基本信息并计算工资