目录
- 软件设计模式
- 第二章 创建型软件设计模式
- 1. 工厂模式
- 2. 生成器模式
- 3. 单例模式
- 第三章 结构型软件设计模式
- 1. 组合模式
- 2. 适配器模式
- 3. 外观模式
- 4. 桥接模式
- 第四章 行为型软件设计模式
- 1. 迭代器模式
- 2. 访问者模式
- 3. 中介者模式
- 4. 策略模式
- 5. 状态模式
- 案例分析
- 工厂模式案例
- 生成器模式案例
- 单例模式案例
- 组合模式案例
- 适配器模式案例
- 外观模式案例
- 桥接模式案例
- 迭代器模式案例
- 访问者模式案例
- 中介者模式案例
- 策略模式案例
- 状态模式案例
- 软件体系结构
- 第六章 经典软件体系结构
- 1. 调用-返回风格软件体系结构
- 2. 数据流风格软件体系结构
- 3. 基于事件的软件体系结构
- 4. 层次软件体系结构
- 5. MVC软件体系结构
- 第七章 基于网络的软件体系结构
- 1. 客户端-服务器软件体系结构
- 2. P2P软件体系结构
- 3. 网格计算软件体系结构
- 4. SOA软件体系结构
- 5. 云计算软件体系结构
- 案例分析
- 1. 主程序-子程序软件体系结构案例
- 2. 管道-过滤器体系结构案例
- 3. 观察者模式案例
- 4. MVC软件体系结构案例
软件设计模式
第二章 创建型软件设计模式
1. 工厂模式
- 在简单工厂方法模式、工厂方法模式与抽象工厂模式中,哪个模式符合开闭原则?为什么?哪个模式一般不符合开闭原则?或者说明在哪种情况下,开闭原则成立,哪种情况下,开闭原则不成立。
答:简单工厂方法模式一般不符合开闭原则;工厂方法模式符合开闭原则;抽象工厂模式在增加新的工厂和产品族时符合开闭模式,在增加新的产品等级结构时不符合开闭模式。
- 在图2.17游戏软件设计中,游戏工厂(SlowGameFactory)类负责创建低级战士(SlowFighter)对象与低级怪物(SlowMonster)对象,并且将创建完的对象以其超类类型返回给用户界面客户端(ClientGUI)对象。然后,用户界面客户端(ClientGUI)对象将操纵低级战士(SlowFighter)对象与低级怪物(SlowMonster)对象,使得它们互相打斗。
问题与任务:- 上述设计使用了什么设计模式?
- 请在以上设计类图中添加4个新的类包括中级战士(MedFighter)、高级战士(SuperFighter)、中级怪物(MedMonster)和高级怪物(SuperMonster),使得中级战士(MedFighter)对象与中级怪物(MedMonster)对象是由一个抽象工厂类创建;高级战士(SuperFighter)对象与高级怪物(SuperMonster)对象由一个抽象工厂类创建,绘制新设计类图;
- 除了以上添加的4个类以外,在以上类图中还应该添加什么类?
- 描述新的设计类图;
- 明确说明新设计的优点。
解:
- 简单工厂模式
- MedGameFactory类和SuperGameFactory类
- 新设计的类图采用抽象工厂模式设计,SlowGameFactory工厂、MedGameFactory工厂和SuperGameFactory工厂继承自GameAbstFactory;SlowFighter、MedFighter和SuperFighter继承自Fighter;SlowMonster、MedMonster和SuperMonster继承自Monster;SlowGameFactory工厂负责创建SlowFighter和SlowMonster,MedGameFactory工厂负责创建MedFighter和MedMonster,SuperGameFactory工厂负责创建SuperFighter和SuperMonster;
- 新设计的类图在增加新的怪物和战士时符合开闭原则,可以在不修改原有代码的基础上完成扩展。
2. 生成器模式
在书本P27页房屋选购系统例子的设计中,添加一个经济型房屋生成器类,命名为EconHouseBuilder。 请绘制新设计的类图。
解:
3. 单例模式
- 使用单例模式设计一个类图来表示随机数产生器(Randomer),整个应用程序中只需要一个类的实例来产生随机数(Random),客户端程序(Client)从类中获取这个实例,调用这个实例的方法有设置起始数方法setSeed()和随机产生下一个数方法nextInt()。请按要求画出类图及其关键属性和操作。
解:
- 用单例模式设计一个打印机管理软件(Spooler),每台计算机可以有若干个打印机(Printer),但只能有一个打印机管理软件(Spooler),以避免两个打印作业同时输出到打印机中。客户端从类中获取Spooler的实例,调用这个实例的方法打印作业PrintJob(File job)。请按要求画出类图及其关键属性和操作。
解:
第三章 结构型软件设计模式
1. 组合模式
- 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。请画出类图。
解:
- 如图所示是某公司的组织结构图,现采用组合设计模式来设计,其中公司(Company)为抽象类,具体公司(ConcreteCompany)表示具体的分公司或者办事处,人力资源部(HRDepartment)和财务部(FinanceDepartment)表示不同的部门,以上的类都拥有Add()方法和Delete()方法。请画出类图。
解:
2. 适配器模式
无
3. 外观模式
- 某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件FileReader()、加密CipherMachine()、保存加密后的文件FileWriter()。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类(EncryptFacade),用户可以直接使用该加密外观类完成源文件(fileNameSrc)的读取、读取后的文件(plainStr)的加密和加密后文件(encryptStr)的保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求画出类图。
解:
4. 桥接模式
- 现欲实现一个图像浏览系统,要求该系统能够显示BMP、 JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件,使用文件解析parseFile()方法解析为像素矩阵,然后使用doPaint()方法像素矩阵显示在屏幕上。系统必须具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接设计模式,请画出类图。
解析:
第四章 行为型软件设计模式
1. 迭代器模式
- 使用迭代器模式设计一个类图来表示对商品列表( ProductList)的双向(前后向)遍历,遍历的方式是双向迭代器( Myiterator )。其中商店管理系统的商品名称存储在一个字符串数组( productsName)中,双向迭代器的前后向遍历方式分别为( index1、 index2),迭代器实现了抽象类的操作方法( next、 isLast、previous、 isFirst、 getNextItem、 getPreviousItem)。请按要求画出类图及其关键属性和操作。
解析:
2. 访问者模式
- 假设有一个汽车配件类的层次类如下图,为方便起见,这里仅列出部分配件。由于汽车配件类的具体配件名称很少改变,而配件的价格与生产厂家却经常改变,请使用访问者模式重新设计以上的类,画出新的类图。
解析:
3. 中介者模式
- 使用中介者模式来说明联合国的作用。将联合国(UnitedNations)定义为抽象中介者类,联合国下属机构如WTO等作为具体中介者类,能够设置国家如setChina、提供了发消息和收消息的方法(declare、getMessage);国家(Country)作为抽象参与者类,而将中国(China)、美国(America)作为具体参与者类,实现了发消息和收消息的功能(declare、getMessage)。要求绘制相应的类图。
解析:
4. 策略模式
- 某电影院售票系统(MovieTicket)为不同类型的用户提供了不同的打折方式(Discount),学生凭学生证可享受8折优惠(StudentDiscount),儿童可享受减免10元的优惠(ChildrenDiscount),VIP用户除享受半价优惠外还可以进行积分(VIPDiscount),不同的用户实现了不同的计算方法(calculate)。售票系统可定义价格(price)和折扣(discount)两个属性,同时拥有设置价格(setPrice),设置折扣(setDiscount)、获取价格(getPrice)的方法,使用策略模式设计该系统,绘制相应的类图。
解析:
5. 状态模式
- 在射击游戏中,游戏角色(Player)存在几种不同的状态(State)和名字属性(name),分别为正常状态(NomalState)、暂停状态(PauseState)、阵亡状态(DeathState)。在不同状态下角色对象的行为不同,行为有暂停(pause)、开始(start)、被射击(beAttacked)、射击(shot)、移动(move)。使用状态模式来设计和实现角色状态的转换。
解析:
案例分析
工厂模式案例
使用工厂方法模式设计一个系统日志记录器,该系统日志记录器要求支持多种日志记录方式,如文件日志记录(FileLog)、数据库日志记录(DatabaseLog)等,每种记录方式均具有writeLog()方法记录数据,客户端(Client)可选择日志记录方式(logType)通过调用工厂类(LogFactory)中的createLog()方法创建日志(Log)对象,
请按要求画出类图及其关键属性和操作。
解析:
生成器模式案例
使用生成器模式设计一款播放器软件主界面(MainScreen)类图。其中,主界面(MainScreen)有两种显示模式:完整模式(FullModeBuilder),精简模式(SimpleModeBuilder)。
播放器由以下属性构成:显示菜单(Menu)、播放列表(PlayList)、主窗口(MenuWindow)、控制条(ControlBar)等。
用户可以在选择界面上(MainGUI),通过系统管理(ScreenModeController),根据不同的显示类型(setModeBuilder),来定制具体的播放器的主界面对象(construct),并返回一个主界面(MainScreen)。
其中,界面对象是通过调用build方法来对属性进行赋值的(例如,buildMenu方法)。两种类型的界面构建方式均实现了抽象类(ModeBuilder)。
请按要求画出类图及其关键属性和操作。
解析:
单例模式案例
为了节约系统资源,使用单例模式为联机射击游戏(ShooterGame)设计一个场景管理器(SceneManager),它包含一系列成员对象并可以使用manage()方法管理成员对象,此外还提供getInstance()方法用于创建场景管理器实例,instance用于存储已被创建的场景管理器实例,
请按要求画出类图及其关键属性和操作。
解析:
组合模式案例
使用组合模式设计一个类图来表示水果店的物品。
假设水果店有3种水果,分别是苹果(Apple)、西瓜(Watermelon)和橙子(Orange),另外,水果拼盘(FruitPlatter)是组合对象(Composite),拥有集合类型的fruitList私有成员变量,用于(动态地)添加水果到其数据结构中,所以可以产生由3种水果中的一种或多种组成的水果拼盘,当调用水果拼盘的获取价格操作时,将自动分别调用组合中的所有水果子类的获取价格的操作,得出水果拼盘的价格,而不需要知道水果拼盘的细节。
三种水果和水果拼盘都继承于Fruit类,都有float类型的价格(price)私有成员变量,且都有添加(add)、删除(remove)和获取价格(getPrice)方法。
请按要求画出类图及其关键属性和操作。
解析:
适配器模式案例
某公司欲开发一款儿童玩具汽车(Car),为了更好地吸引小朋友的注意力,该玩具汽车在移动(move)过程中伴随着灯光闪烁(twinkle)和声音提示(sound),在该公司以往的产品(OldProduct)中已经实现了控制灯光闪烁和声音提示的程序,为了重用先前的代码并且使得汽车控制软件具有更好的灵活性和扩展性,使用适配器(CarAdapter)模式设计该系统,
请按要求画出类图及其关键操作。
解析:
外观模式案例
在金融机构中,当有客户(Client)前来抵押贷款mortgage()时,需通过抵押系统(Mortgage)对客户进行合格性验证isQualified(),只有验证通过后才能进行抵押贷款。
抵押系统的合格性验证需要三个子系统同时工作:身份验证(Authentication)子系统确认客户身份是否合法isLegal()、信用(Credit)子系统查询其信用是否良好isCredible()以及贷款(Loan)子系统查询客户是否有贷款劣迹hasBadLoans()。只有这三个子系统都通过时才能通过合格性验证。
使用外观模式模拟该过程,请按要求画出类图及其关键属性和操作。
解析:
桥接模式案例
使用桥接模式设计不同品牌的不同家具的对象构造类图。
宜家(YJ)、业通(YT)和百强(BQ)都是家具制造商,它们都生产沙发(sofa)、茶几(TeaTable)和电脑桌(ComputerTable)。现需要设计一个系统,描述这些家具制造商以及它们所制造的家具,其中家具制造商( FurnitureProducer)具有生产方法produce()和设置家具类型方法setFurniture(Furniture furniture),家具类(Furniture)有装配方法assemble(),
请按要求画出类图及其关键属性和操作。
解析:
迭代器模式案例
使用迭代器模式设计一个类图来表示对整数矩阵(Matrix)进行不同方式的遍历。其中遍历方式有:按照奇数类型进行遍历(OddIterator)和按照偶数类型进行遍历(EvenIterator)。整数矩阵(Matrix)可以获得该矩阵的整数(getMatrixData);可以选择不同的迭代器进行遍历(createOddIterator和createEvenIterator)。其中,两种迭代器均实现了抽象类NumberIterator的操作方法(hasnext、next、remove、getNumOfItems)。
请按要求画出类图及其关键属性和操作。
解析:
访问者模式案例
使用访问者模式设计高校奖励审批系统。
某高校奖励审批系统可实现教师奖励的审批和学生奖励的审批,可以参与评选的人员(Person)有教师(Teacher)和学生(Student),审批的奖励项目(AwardCheck)包括科研奖(ScientificAwardCheck)和成绩优秀奖(ExcellenceAwardCheck)。其中,教师或学生的论文(paperAmount)超过规定数目可评选科研奖,教师教学反馈分(feedbackScore)或学生平均分(score)达到规定分数可评选成绩优秀奖。系统中的候选人列表类(CandidateList)定义了一个人员列表(PersonList),用于存放待审核的教师和学生信息,并可以对列表进行添加人员(addPerson)、删除人员(removePerson)和审批人员(accept)等操作。客户端(Client)创建候选人列表对象,通过调用候选人列表类的方法,允许奖励审批对象(AwardCheck)访问参与评选的人员(Person)。
请按要求画出类图及其关键属性和操作。
解析:
中介者模式案例
使用中介者模式设计房屋租赁系统。
房屋中介(HouseMediator)作为具体中介者类,实现了中介者接口类(Mediator)的方法,能够向参与者发送房产信息(sendMessage),并提供了参与者的注册方法(registerLandlord与registerRenter);
房东(Landlord)和房客(Renter)作为具体参与者类,实现了参与者接口类(Person)的方法,能够向房屋中介发送需求(sendMessage)及从房屋中介获取房产信息(getMessage)。
请按要求画出类图及其关键属性和操作。
解析:
策略模式案例
现有一种玩具,它可以模拟三种动物(Animal)的叫声:狗叫(Dog)、猫叫(Cat)和青蛙叫(Frog),每一种动物都有cry()方法用于实现发出叫声的操作。玩具类(Toy) 使用setAnimal()方法设置动物,并使用属性currentAnimal记录玩具当前模拟的动物,使用 run()方法来调用动物的cry()方法使玩具发出叫声。为将来能模拟更多的动物,采用策略模式设计该系统,请按要求画出类图及其关键属性和操作。
解析:
状态模式案例
使用状态模式设计一个类图来表示火箭升空的状态改变。
其中火箭升空的大致状态有:系统启动状态(StartState)、加速状态(AccelerateState)、稳定运行状态(StableState)。
环境类(Context)通过执行doAction()来改变火箭升空过程中的状态改变。其中三个升空状态类均继承父类RocketState状态类,能够创建升空状态对象(createStateObj),实现了升空状态变化逻辑(changeState),不同升空状态子类分别实现了当前状态下的操作(performTask) 。当火箭运行到稳定状态时候,环境类(Context)一直保持这个状态。
请按要求画出类图及其关键属性和操作。
解析:
软件体系结构
第六章 经典软件体系结构
1. 调用-返回风格软件体系结构
- 主程序-子程序体系结构与面向对象体系结构各自使用什么设计方法?两种程序设计最终得到什么图?
答:主程序-子程序体系结构使用自顶向下的功能划分的设计方法,面向对象体系结构使用面向对象的设计方法。
主程序-子程序体系结构最终得到程序结构图,面向对象体系结构最终得到设计类图。
- 试用主程序-子程序结构设计程序:从键盘输入一个2位十进制的月份数(01-12),然后显示出相应的英文缩写名。请画出程序结构图。
解:
2. 数据流风格软件体系结构
- 下列两种情形中哪种适合使用顺序批处理体系结构
a、一个需要对数据进行实时处理的银行业务系统。
b、一个需要周期性更新的人口普查系统。
解析:b
- 使用管道-过滤器体系结构设计与实现一个处理职员收入信息的软件。程序应该按照如下方式对输入文件employee.txt进行处理:(1)按照职员工资金额对文件内容进行排序。(2)找出年薪在120000元以上的所有职员。(3)计算年薪在120000元以上的职员的个人所得税,税率为30%。(4)打印出年薪在120000以上的职员的税收信息。
a、画出设计的(管道图)逻辑图
b、画出设计类图,包括所有的类的设计与方法。
c、描述每个方法的功能。
解析:
注:题C,考试的时候要写清楚一下。
3、使用管道-过滤器体系结构设计以下问题。要求:在设计的在线销售系统中,新的订单以消息的形式送达企业。该消息被加密,包含数字证书形式的认证信息,并且可能有重复发送消息的情况发生。系统功能包括:(1)输入客户订单消息。(2)对该消息进行解密。(3)检查认证信息。(4)检查是否有重复发送的消息,如果被复制的消息发生了,则取消重复的订单,仅保留一份订单。要求:
a、画出设计的(管道图)逻辑图
b、画出设计类图,包括所有的类的设计与方法。
c、描述每个方法的功能。
解析:
注:题C,考试的时候要写清楚一下。
3. 基于事件的软件体系结构
- 在上面的案例中,当调用Observable类的notifyObserver之前,还应该同时调用什么方法?
解析:setChanged()
- 设计一个控制金鱼缸水质、水温与水位高度的软件系统。基本需求:该程序用于自动控制金鱼缸中的水质、水温与水位高度。系统硬件包含鱼缸、化学传感器、水温传感器与水位传感器。当化学传感器的读数超过某种范围时,鱼缸需要排除部分废水,同时补充新鲜的水;当水温传感器读数低于某温度,或者超过某温度值时,需要开启加热设备或者冷却设备调整水温;当水位读数高于或低于特定高度时,需要开启排水设备,排除部分水或者添加新鲜的水。
要求使用观察者模式设计该软件系统。具体要求:
①画出设计类图。
②解释设计的控制程序的风格,说明类图中各软件组件之间的关系及各软件组件所包含的功能。
解析:
4. 层次软件体系结构
- 指出层次软件体系结构的三个典型应用。
答:层次通信协议,数据库系统领域,操作系统领域
5. MVC软件体系结构
- 在带有观察者机制的MVC体系结构中,将观察者类中的更新方法update(Observable e)的参数类型设为Observable,这样做的好处是什么?
答:将观察者类中的更新方法update(Observable e)的参数类型设为Observable,在被观察者对象发生变化时,它会调用0bservable的 notifyObservers()方法,此方法调用所有的具体观察者的update()方法,从而使所有的观察者都被通知更新自己。
- 设计一个火车售票系统,需要有用户图形输入界面,包括车票的出发时间、价格、车次以及当前剩余车票数的显示界面。要求:
1)车票需要显示以下信息:出发时间、价格、车次、当前剩余车票数;
2)剩余票数的显示必须立即反映票数的变化;
3)用户界面易于改变,甚至在运行时改变。
采用MVC体系结构(使用观察者机制)设计该题,用户输入界面和显示视图独立显示。
解:
第七章 基于网络的软件体系结构
1. 客户端-服务器软件体系结构
- 用文字叙述层次体系结构与客户端-服务器体系结构的区别。
答:在通常的层次体系结构中所涉及的层次指的是逻辑层,而三层客户端-服务器体系结构中所涉及的层是从物理方面考虑的层。即客户端运行在PC上,服务层被部署在应用服务器上,数据库层被部署在数据库服务器上。
- 三层客户端-服务器体系结构与两层客户端-服务器体系结构相比,明显的优点有哪些?
答:
- 在系统管理方面,三层体系结构比较简单,应用可以在服务器端使用系统管理工具进行集中管理。
- 在数据封装方面,三层结构则较好,通过客户端调用服务或者方法来完成。
- 在重复应用方面,三层体系结构在复用方面表现良好,可以复用服务与对象。
- 在遗产应用集成方面,对于三层客户端-服务器体系结构来讲,可以利用封装服务与对象的方式,通过网关、网络连接器、路由器进行遗产应用集成。
- 在互联网支持方面,三层客户端-服务器体系结构由于在客户端往往只有网络浏览器,所以该方面表现优良。
- 在多数据库支持方面,在三层结构中,一个商业交易可以使用几个数据库。
2. P2P软件体系结构
- 请简述P2P体系结构的概念。
答:P2P分布式网络体系结构由众多的参与者结点,或者称之为对等结点组成,每个结点都可以为其他参与者提供一些服务,各个参与者之间直接交互,而不需要中间网络服务器。每个结点都是资源的提供者,同时又都是资源的消费者。
- 第一代到第三代P2P体系结构分别叫什么?
答:集中目录式P2P体系结构,纯P2P体系结构,非结构化的层次纯P2P体系结构
- 请简述集中目录式P2P的优缺点。
答:集中目录式P2P体系结构的优点为,提高了网络的可管理性,使得对共享资源的查找和更新非常方便。其缺点为网络的稳定性比较差。一旦服务器失效,则该服务器下的对等结点可能全部失效。很明显,中心控制存在单点失效与不可扩展问题,同时中心目录服务器还很可能形成瓶颈问题。
3. 网格计算软件体系结构
- 中国地震预测组织联盟包括几百家地震预报站,每个地震预报站都有高质量的可靠的实验设备,但是每个地震站又无能力对全国地区进行地震预报计算。国家地震局决定综合利用每个站的可靠的计算资源,包括各种传感器数据,以便达到实时性的地震预报。计算包含地址结构变化监测、断裂带监测、地下水位计算等。如果要进行综合实时预报软件的设计,并且要从下列体系结构中进行选择:
(1)网格计算体系结构;
(2)P2P软件体系结构。
那么选择哪种体系结构比较合适?请说明选择这种体系结构的原因。
解:
网格计算体系结构,网格计算体系结构偏向整合所有资源完成一件事,对性能,服务质量,安全性要求较高,P2P软件体系结构偏向资源的共享,题目中“国家地震局决定综合利用每个站的可靠的计算资源,包括各种传感器数据,以便达到实时性的地震预报”,比较适合网格计算体系结构。
- P2P软件体系结构与网格软件体系结构的主要区别是什么?如果要设计一个应用程序,为电影爱好者成立一个虚拟组织,使得电影爱好者可以通过互联网交换影片,那么:
(1)应从以上的两种体系结构中选择哪种?
(2)说明选择这个体系结构的原因是什么?
解:
网格计算强调资源整合、性能、服务质量和安全性等问题,P2P计算关注网络服务质量和支持问题。
(1)P2P软件体系结构
(2)网格计算体系结构偏向整合所有资源完成一件事,对性能,服务质量,安全性要求较高,P2P软件体系结构偏向资源的共享,电影爱好者可以通过互联网交换影片,即为电影资源的共享,比较适合P2P软件体系结构。
4. SOA软件体系结构
- Web Service与SOA体系结构的关系是什么? Web Service有什么好处?
解:
SOA可以有不同的实现,而Web Service 就是该体系结构的一种实现。
Web Services提供了一种能够在异构应用之间进行互操作的标准方案。Web Services可以被松散地组装在一起,以便实现更为复杂的业务操作。即便是原有提供简单服务的程序也可以通过互动而实现服务增值。
- 简述SOA体系结构的优势。
解:
和正常的 B2B电子商务不同的是,在SOA体系结构中,服务提供者与消费者之间不是静态绑定的,而是可以被自动发现和动态绑定的。SOA支持对企业遗留系统的复用,通过从各种异构的遗留系统中创建新的统一的服务,实现各系统之间的互操作性。
5. 云计算软件体系结构
- 云计算都提供哪些类型的服务?
答:基础设施即服务、平台即服务、软件即服务
- 有哪些开源云计算软件产品,分别有何作用?
答:Hadoop,Hadoop已被广泛用于一些商业云计算平台中,例如Amazon , Yahoo等公司都采用了Hadoop 。
案例分析
1. 主程序-子程序软件体系结构案例
试用主程序-子程序软件体系结构设计一个员工信息查询系统(Staff Information Query System),要求输入员工工号(Staff Number),输出该员工的信息(Staff Information),包括姓名(Name),部门(Department),月薪(Salary),联系电话(Phone)等。
请按要求画出数据流图和程序结构图。
解:
2. 管道-过滤器体系结构案例
使用管道-过滤器体系结构设计模拟C程序代码source.cpp的执行过程:
- 编译(Compiler):将source.cpp翻译成目标代码(compile()),目标代码是在目标机器上运行的代码。
- 链接(Linker): 将目标代码与C函数库相连接(link()),并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码。
- 执行(Execution): 在特定的机器环境下运行(execute())C程序。
要求画出设计类图,包括所有的类的设计与方法。
解:
3. 观察者模式案例
使用观察者模式设计一个类图来模拟日常快递的领取。
在该场景中,快递公司(Express)作为被观察者,实现了被观察者(Observable)接口的方法,能够注册观察者(addObserver)、改变状态信息(setChanged)并通知观察者快递信息(notifyObservers);教师(Teacher)和学生(Student)都是观察者,实现了观察者(Observer)接口的方法,当收到通知信息时采取相应操作(update)。
请按要求画出类图及其关键属性和操作。
解:
4. MVC软件体系结构案例
采用MVC体系结构(使用观察者机制)设计一个汽车销售系统。
在该场景中,汽车(CarModel)作为被观察者,实现了被观察者(Observable)接口的方法,能够通知观察者汽车的信息(notifyObservers)、注册观察者(register),并使用列表(observersList)来保存观察者;界面由用户图形输入界面(CarAuctionGUI)、汽车介绍界面(CarGUIView)、剩余数量界面(CarBitView)组成,其中CarGUIView和CarBitView都是观察者,实现了观察者(Observer)接口的方法,当收到信息时采取相应操作(update);控制器类(Controller)处理用户输入,使用actionPerformance()方法对用户输入做出响应。
要求用户输入界面和显示视图独立显示。请按要求画出类图及其关键属性和操作。
解: