一、实验目的及要求
1、掌握行为型模式的概念。
2、掌握备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式的构造方式及使用情景。
二、实验设备(环境)
1、 软件需求: Dev-Cpp5.4, Rational Rose / Microsoft Visio
2、 硬件需求: Pentium III 450以上的CPU处理器,1G以上的内存,2G的自由硬盘空间
三、实验内容
1、在某银行系统定义的账户有三种状态:
(1) 如果账户(Account)中余额(balance)大于等于0,此时账户的状态为绿色(GreenState),即正常状态,表示既可以向该账户存款(deposit)也可以从该账户取款(withdraw);
(2) 如果账户中余额小于0,并且大于等于-1000,则账户的状态为黄色(YellowState),即欠费状态,此时既可以向该账户存款也可以从该账户取款;
(3) 如果账户中余额小于-1000,那么账户的状态为红色(RedState),即透支状态,此时用户只能向该账户存款,不能再从中取款。
现用状态模式来实现状态的转化问题,用户只需要执行简单的存款和取款操作,系统根据余额数量自动转换到相应的状态。银行账户实例类图和状态图分别如图1和图2。
2、对于题目1中的银行系统账户,使用观察者模式和策略模式作改进,使得:
(1)在图1中增加银行类Bank,当银行中有新的银行政策出台或新的金融产品发布,就向所有的账户Account发短信消息notify(string message)。
(2)对于图1中的账户类Account,关联一个消息策略类MessageStrategy,增加相应的成员变量msStrategy和成员函数setStrategy(),可以更换账户接收消息的方式,并在成员函数Response(string message)中根据不同的策略(如微信或短信)给账户提示消息:如果是银行类Bank发送的通知,则在MessageBox窗口(模拟短信)中显示消息;如果是账户变动产生的提醒,则在控制台(模拟微信)中打印余额Balance和账户状态消息。
图1 银行账户实例类图
图2 银行账户状态图
四、实验步骤与结果
练习一
1.状态模式设计结构图UML图:
2.实验结果截图:
3.代码分析:
Account.h
#ifndef _ACCOUNT_H_
#define _ACCOUNT_H_
#include<iostream>
#include<string>
#include<list>
using namespace std;
class AccountState;
class Account
{
public:
Account(string owner,double init);
~Account();
void deposit(d