设计模式与软件体系结构课后练习参考答案

目录

  • 软件设计模式
    • 第二章 创建型软件设计模式
      • 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. 工厂模式

  1. 在简单工厂方法模式、工厂方法模式与抽象工厂模式中,哪个模式符合开闭原则?为什么?哪个模式一般不符合开闭原则?或者说明在哪种情况下,开闭原则成立,哪种情况下,开闭原则不成立。

答:简单工厂方法模式一般不符合开闭原则;工厂方法模式符合开闭原则;抽象工厂模式在增加新的工厂和产品族时符合开闭模式,在增加新的产品等级结构时不符合开闭模式。

  1. 在图2.17游戏软件设计中,游戏工厂(SlowGameFactory)类负责创建低级战士(SlowFighter)对象与低级怪物(SlowMonster)对象,并且将创建完的对象以其超类类型返回给用户界面客户端(ClientGUI)对象。然后,用户界面客户端(ClientGUI)对象将操纵低级战士(SlowFighter)对象与低级怪物(SlowMonster)对象,使得它们互相打斗。
    在这里插入图片描述
    问题与任务:
    1. 上述设计使用了什么设计模式?
    2. 请在以上设计类图中添加4个新的类包括中级战士(MedFighter)、高级战士(SuperFighter)、中级怪物(MedMonster)和高级怪物(SuperMonster),使得中级战士(MedFighter)对象与中级怪物(MedMonster)对象是由一个抽象工厂类创建;高级战士(SuperFighter)对象与高级怪物(SuperMonster)对象由一个抽象工厂类创建,绘制新设计类图;
    3. 除了以上添加的4个类以外,在以上类图中还应该添加什么类?
    4. 描述新的设计类图;
    5. 明确说明新设计的优点。

解:

  1. 简单工厂模式

请添加图片描述

  1. MedGameFactory类和SuperGameFactory类
  2. 新设计的类图采用抽象工厂模式设计,SlowGameFactory工厂、MedGameFactory工厂和SuperGameFactory工厂继承自GameAbstFactory;SlowFighter、MedFighter和SuperFighter继承自Fighter;SlowMonster、MedMonster和SuperMonster继承自Monster;SlowGameFactory工厂负责创建SlowFighter和SlowMonster,MedGameFactory工厂负责创建MedFighter和MedMonster,SuperGameFactory工厂负责创建SuperFighter和SuperMonster;
  3. 新设计的类图在增加新的怪物和战士时符合开闭原则,可以在不修改原有代码的基础上完成扩展。

2. 生成器模式

  在书本P27页房屋选购系统例子的设计中,添加一个经济型房屋生成器类,命名为EconHouseBuilder。 请绘制新设计的类图。
解:

请添加图片描述


3. 单例模式

  1. 使用单例模式设计一个类图来表示随机数产生器(Randomer),整个应用程序中只需要一个类的实例来产生随机数(Random),客户端程序(Client)从类中获取这个实例,调用这个实例的方法有设置起始数方法setSeed()和随机产生下一个数方法nextInt()。请按要求画出类图及其关键属性和操作。

解:
请添加图片描述

  1. 用单例模式设计一个打印机管理软件(Spooler),每台计算机可以有若干个打印机(Printer),但只能有一个打印机管理软件(Spooler),以避免两个打印作业同时输出到打印机中。客户端从类中获取Spooler的实例,调用这个实例的方法打印作业PrintJob(File job)。请按要求画出类图及其关键属性和操作。

解:
请添加图片描述


第三章 结构型软件设计模式

1. 组合模式

  1. 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。请画出类图。

解:请添加图片描述

  1. 如图所示是某公司的组织结构图,现采用组合设计模式来设计,其中公司(Company)为抽象类,具体公司(ConcreteCompany)表示具体的分公司或者办事处,人力资源部(HRDepartment)和财务部(FinanceDepartment)表示不同的部门,以上的类都拥有Add()方法和Delete()方法。请画出类图。

在这里插入图片描述

解:
请添加图片描述


2. 适配器模式


3. 外观模式

  1. 某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件FileReader()、加密CipherMachine()、保存加密后的文件FileWriter()。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类(EncryptFacade),用户可以直接使用该加密外观类完成源文件(fileNameSrc)的读取、读取后的文件(plainStr)的加密和加密后文件(encryptStr)的保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求画出类图。

解:
请添加图片描述


4. 桥接模式

  1. 现欲实现一个图像浏览系统,要求该系统能够显示BMP、 JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件,使用文件解析parseFile()方法解析为像素矩阵,然后使用doPaint()方法像素矩阵显示在屏幕上。系统必须具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接设计模式,请画出类图。

解析:
请添加图片描述


第四章 行为型软件设计模式

1. 迭代器模式

  1. 使用迭代器模式设计一个类图来表示对商品列表( ProductList)的双向(前后向)遍历,遍历的方式是双向迭代器( Myiterator )。其中商店管理系统的商品名称存储在一个字符串数组( productsName)中,双向迭代器的前后向遍历方式分别为( index1、 index2),迭代器实现了抽象类的操作方法( next、 isLast、previous、 isFirst、 getNextItem、 getPreviousItem)。请按要求画出类图及其关键属性和操作。

解析:
请添加图片描述


2. 访问者模式

  1. 假设有一个汽车配件类的层次类如下图,为方便起见,这里仅列出部分配件。由于汽车配件类的具体配件名称很少改变,而配件的价格与生产厂家却经常改变,请使用访问者模式重新设计以上的类,画出新的类图。
    在这里插入图片描述

解析:
请添加图片描述


3. 中介者模式

  1. 使用中介者模式来说明联合国的作用。将联合国(UnitedNations)定义为抽象中介者类,联合国下属机构如WTO等作为具体中介者类,能够设置国家如setChina、提供了发消息和收消息的方法(declare、getMessage);国家(Country)作为抽象参与者类,而将中国(China)、美国(America)作为具体参与者类,实现了发消息和收消息的功能(declare、getMessage)。要求绘制相应的类图。

解析:
请添加图片描述


4. 策略模式

  1. 某电影院售票系统(MovieTicket)为不同类型的用户提供了不同的打折方式(Discount),学生凭学生证可享受8折优惠(StudentDiscount),儿童可享受减免10元的优惠(ChildrenDiscount),VIP用户除享受半价优惠外还可以进行积分(VIPDiscount),不同的用户实现了不同的计算方法(calculate)。售票系统可定义价格(price)和折扣(discount)两个属性,同时拥有设置价格(setPrice),设置折扣(setDiscount)、获取价格(getPrice)的方法,使用策略模式设计该系统,绘制相应的类图。

解析:
请添加图片描述


5. 状态模式

  1. 在射击游戏中,游戏角色(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. 调用-返回风格软件体系结构

  1. 主程序-子程序体系结构与面向对象体系结构各自使用什么设计方法?两种程序设计最终得到什么图?

答:主程序-子程序体系结构使用自顶向下的功能划分的设计方法,面向对象体系结构使用面向对象的设计方法
主程序-子程序体系结构最终得到程序结构图,面向对象体系结构最终得到设计类图

  1. 试用主程序-子程序结构设计程序:从键盘输入一个2位十进制的月份数(01-12),然后显示出相应的英文缩写名。请画出程序结构图。

解:
请添加图片描述


2. 数据流风格软件体系结构

  1. 下列两种情形中哪种适合使用顺序批处理体系结构
    a、一个需要对数据进行实时处理的银行业务系统。
    b、一个需要周期性更新的人口普查系统。

解析:b

  1. 使用管道-过滤器体系结构设计与实现一个处理职员收入信息的软件。程序应该按照如下方式对输入文件employee.txt进行处理:(1)按照职员工资金额对文件内容进行排序。(2)找出年薪在120000元以上的所有职员。(3)计算年薪在120000元以上的职员的个人所得税,税率为30%。(4)打印出年薪在120000以上的职员的税收信息。
    a、画出设计的(管道图)逻辑图
    b、画出设计类图,包括所有的类的设计与方法。
    c、描述每个方法的功能。

解析:
请添加图片描述
注:题C,考试的时候要写清楚一下。

3、使用管道-过滤器体系结构设计以下问题。要求:在设计的在线销售系统中,新的订单以消息的形式送达企业。该消息被加密,包含数字证书形式的认证信息,并且可能有重复发送消息的情况发生。系统功能包括:(1)输入客户订单消息。(2)对该消息进行解密。(3)检查认证信息。(4)检查是否有重复发送的消息,如果被复制的消息发生了,则取消重复的订单,仅保留一份订单。要求:
a、画出设计的(管道图)逻辑图
b、画出设计类图,包括所有的类的设计与方法。
c、描述每个方法的功能。

解析:
请添加图片描述
注:题C,考试的时候要写清楚一下。


3. 基于事件的软件体系结构

  1. 在上面的案例中,当调用Observable类的notifyObserver之前,还应该同时调用什么方法?

解析:setChanged()

  1. 设计一个控制金鱼缸水质、水温与水位高度的软件系统。基本需求:该程序用于自动控制金鱼缸中的水质、水温与水位高度。系统硬件包含鱼缸、化学传感器、水温传感器与水位传感器。当化学传感器的读数超过某种范围时,鱼缸需要排除部分废水,同时补充新鲜的水;当水温传感器读数低于某温度,或者超过某温度值时,需要开启加热设备或者冷却设备调整水温;当水位读数高于或低于特定高度时,需要开启排水设备,排除部分水或者添加新鲜的水。
      要求使用观察者模式设计该软件系统。具体要求:
       ①画出设计类图。
       ②解释设计的控制程序的风格,说明类图中各软件组件之间的关系及各软件组件所包含的功能。

解析:
请添加图片描述


4. 层次软件体系结构

  1. 指出层次软件体系结构的三个典型应用。

答:层次通信协议,数据库系统领域,操作系统领域


5. MVC软件体系结构

  1. 在带有观察者机制的MVC体系结构中,将观察者类中的更新方法update(Observable e)的参数类型设为Observable,这样做的好处是什么?

答:将观察者类中的更新方法update(Observable e)的参数类型设为Observable,在被观察者对象发生变化时,它会调用0bservable的 notifyObservers()方法,此方法调用所有的具体观察者的update()方法,从而使所有的观察者都被通知更新自己。

  1. 设计一个火车售票系统,需要有用户图形输入界面,包括车票的出发时间、价格、车次以及当前剩余车票数的显示界面。要求:
    1)车票需要显示以下信息:出发时间、价格、车次、当前剩余车票数;
    2)剩余票数的显示必须立即反映票数的变化;
    3)用户界面易于改变,甚至在运行时改变。
    采用MVC体系结构(使用观察者机制)设计该题,用户输入界面和显示视图独立显示。

解:请添加图片描述


第七章 基于网络的软件体系结构

1. 客户端-服务器软件体系结构

  1. 用文字叙述层次体系结构与客户端-服务器体系结构的区别。

答:在通常的层次体系结构中所涉及的层次指的是逻辑层,而三层客户端-服务器体系结构中所涉及的层是从物理方面考虑的层。即客户端运行在PC上,服务层被部署在应用服务器上,数据库层被部署在数据库服务器上。

  1. 三层客户端-服务器体系结构与两层客户端-服务器体系结构相比,明显的优点有哪些?

答:

  • 系统管理方面,三层体系结构比较简单,应用可以在服务器端使用系统管理工具进行集中管理。
  • 数据封装方面,三层结构则较好,通过客户端调用服务或者方法来完成。
  • 重复应用方面,三层体系结构在复用方面表现良好,可以复用服务与对象
  • 遗产应用集成方面,对于三层客户端-服务器体系结构来讲,可以利用封装服务与对象的方式,通过网关、网络连接器、路由器进行遗产应用集成
  • 互联网支持方面,三层客户端-服务器体系结构由于在客户端往往只有网络浏览器,所以该方面表现优良
  • 多数据库支持方面,在三层结构中,一个商业交易可以使用几个数据库

2. P2P软件体系结构

  1. 请简述P2P体系结构的概念。

答:P2P分布式网络体系结构由众多的参与者结点,或者称之为对等结点组成,每个结点都可以为其他参与者提供一些服务,各个参与者之间直接交互,而不需要中间网络服务器。每个结点都是资源的提供者,同时又都是资源的消费者。

  1. 第一代到第三代P2P体系结构分别叫什么?

答:集中目录式P2P体系结构,纯P2P体系结构,非结构化的层次纯P2P体系结构

  1. 请简述集中目录式P2P的优缺点。

答:集中目录式P2P体系结构的优点为,提高了网络的可管理性,使得对共享资源的查找和更新非常方便。其缺点为网络的稳定性比较差。一旦服务器失效,则该服务器下的对等结点可能全部失效。很明显,中心控制存在单点失效与不可扩展问题,同时中心目录服务器还很可能形成瓶颈问题。


3. 网格计算软件体系结构

  1. 中国地震预测组织联盟包括几百家地震预报站,每个地震预报站都有高质量的可靠的实验设备,但是每个地震站又无能力对全国地区进行地震预报计算。国家地震局决定综合利用每个站的可靠的计算资源,包括各种传感器数据,以便达到实时性的地震预报。计算包含地址结构变化监测、断裂带监测、地下水位计算等。如果要进行综合实时预报软件的设计,并且要从下列体系结构中进行选择:
    (1)网格计算体系结构;
    (2)P2P软件体系结构。
    那么选择哪种体系结构比较合适?请说明选择这种体系结构的原因。

解:
  网格计算体系结构,网格计算体系结构偏向整合所有资源完成一件事,对性能,服务质量,安全性要求较高,P2P软件体系结构偏向资源的共享,题目中“国家地震局决定综合利用每个站的可靠的计算资源,包括各种传感器数据,以便达到实时性的地震预报”,比较适合网格计算体系结构。

  1. P2P软件体系结构与网格软件体系结构的主要区别是什么?如果要设计一个应用程序,为电影爱好者成立一个虚拟组织,使得电影爱好者可以通过互联网交换影片,那么:
    (1)应从以上的两种体系结构中选择哪种?
    (2)说明选择这个体系结构的原因是什么?

解:
  网格计算强调资源整合、性能、服务质量和安全性等问题,P2P计算关注网络服务质量和支持问题
(1)P2P软件体系结构
(2)网格计算体系结构偏向整合所有资源完成一件事,对性能,服务质量,安全性要求较高,P2P软件体系结构偏向资源的共享,电影爱好者可以通过互联网交换影片,即为电影资源的共享,比较适合P2P软件体系结构。


4. SOA软件体系结构

  1. Web Service与SOA体系结构的关系是什么? Web Service有什么好处?

解:
  SOA可以有不同的实现,而Web Service 就是该体系结构的一种实现。
  Web Services提供了一种能够在异构应用之间进行互操作的标准方案Web Services可以被松散地组装在一起,以便实现更为复杂的业务操作。即便是原有提供简单服务的程序也可以通过互动而实现服务增值

  1. 简述SOA体系结构的优势。

解:
  和正常的 B2B电子商务不同的是,在SOA体系结构中,服务提供者与消费者之间不是静态绑定的,而是可以被自动发现和动态绑定的。SOA支持对企业遗留系统的复用,通过从各种异构的遗留系统中创建新的统一的服务,实现各系统之间的互操作性。


5. 云计算软件体系结构

  1. 云计算都提供哪些类型的服务?

答:基础设施即服务、平台即服务、软件即服务

  1. 有哪些开源云计算软件产品,分别有何作用?

答:Hadoop,Hadoop已被广泛用于一些商业云计算平台中,例如Amazon , Yahoo等公司都采用了Hadoop 。


案例分析

1. 主程序-子程序软件体系结构案例

  试用主程序-子程序软件体系结构设计一个员工信息查询系统(Staff Information Query System),要求输入员工工号(Staff Number),输出该员工的信息(Staff Information),包括姓名(Name),部门(Department),月薪(Salary),联系电话(Phone)等。
  请按要求画出数据流图和程序结构图。

解:
请添加图片描述

2. 管道-过滤器体系结构案例

使用管道-过滤器体系结构设计模拟C程序代码source.cpp的执行过程:

  1. 编译(Compiler):将source.cpp翻译成目标代码(compile()),目标代码是在目标机器上运行的代码。
  2. 链接(Linker): 将目标代码与C函数库相连接(link()),并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码。
  3. 执行(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()方法对用户输入做出响应。
  要求用户输入界面和显示视图独立显示。请按要求画出类图及其关键属性和操作。

解:
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1424914.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2010-2024年各地级市社会信用体系建设匹配DID数据

2010-2024年各地级市社会信用体系建设匹配DID数据 1、时间:2010-2024年 2、指标:行政区划代码、年份、所属省份、地区、社会信用体系建设示范区 3、范围:310个地级市 4、来源:国家发改委 5、指标解释: 社会信用体…

USB-OTG:1、OTG原理介绍

目录 🍅点击这里查看所有博文 随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记…

深入剖析Tomcat(八) 载入器与打破双亲委派机制的自定义类加载器

写这篇文章让我头大了好几天,书中描述的内容倒是不多,可能也是那会Tomcat的现状。如今Tomcat发展了好多代,加上springboot的广泛应用,导致现在的类加载的步骤和Tomcat资料中描述的大相径庭。可能也是由于微服务的发展,…

Ubuntu 安装 eclipse 的详细过程及工程创建和编译配置

目录 一、安装环境二、下载依赖 java jdk三、下载 eclipse四、安装4.1 java 环境4.2 eclipse 安装4.3 打开 eclipse 五、配置 eclipse5.1 新建 C 工程5.2 工具链 配置5.3 头文件路径5.4 链接库5.5 编译 一、安装环境 Ubuntu 版本:22.04.3 位数:64-bit 二…

CRWU凯斯西储大学轴承数据,12k频率,十分类

CRWU凯斯西储大学轴承数据,12k频率,十分类。 from torch.utils.data import Dataset, DataLoader from scipy.io import loadmat import numpy as np import os from sklearn import preprocessing # 0-1编码 from sklearn.model_selection import Str…

基于HTML5和CSS3搭建一个Web网页(一)

倘若代码中有任何问题或疑问,欢迎留言交流~ 网页描述 创建一个包含导航栏、主内容区域和页脚的响应式网页。 需求: 导航栏: 在页面顶部创建一个导航栏,包含首页、关于我们、服务和联系我们等链接。 设置导航栏样式,包括字体、颜色和背景颜…

Unity | Spine动画动态加载

一、准备工作 Spine插件及基本知识可查看这篇文章:Unity | Spine动画记录-CSDN博客 二、Spine资源动态加载 1.官方说明 官方文档指出不建议这种操作。但spine-unity API允许在运行时从SkeletonDataAsset或甚至直接从三个导出的资产实例化SkeletonAnimation和Skel…

使用JasperReport工具,生成报表模版,及通过JavaBean传参,常见问题及建议

1.下载JasperReport工具 下载地址:社区版 - Jaspersoft 社区 邮箱:lorettepatri.ckoa5434gmail.com 密码:Zx123456. 2.工具使用方法注意 1.一次参数需要在左下角Parameters中新建,直接拖转右上角的TextField不会自动新建参数,到头来还是要在Parameters中新建 2.循环参数需…

ChatGPT 4o 使用案例之一

2024年GPT迎来重大更新,OpenAI发布GPT-4o GPT-4o(“o”代表“全能”) 它可以接受任意组合的文本、音频和图像作为输入,并生成任意组合的文本、音频和图像输出。它可以在 232 毫秒内响应音频输入,平均为 320 毫秒&…

Git使用(4):分支管理

一、新建分支 首先选择Git -> Branches... 然后选择 New Branch,输入新分支名称,例如dev。 可以看到右下角显示已经切换到新建的dev分支了。 push到远程仓库,可以看到新添加的分支。 二、切换分支与合并分支 为了演示合并分支&#xff0c…

码农慎入 | 入坑软路由,退烧IDC,Homelab折腾记

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 俗话说,入门软路由,退坑IDC 这一期,我们将深入探讨一个许多科技爱好者…

【oracle】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正,跪谢一键三连! 资源下载: oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载: Instant Client Setup.exe资源下载: oci.dll、oraocci11.dll、oraoc…

[数据集][目标检测]蕃茄核桃桔子龙眼青枣5种水果检测数据集VOC+YOLO格式270张5类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):270 标注数量(xml文件个数):270 标注数量(txt文件个数):270 标注类别…

人工智能|深度学习——YOLOV8结构图

YoloV8相对于YoloV5的改进点: Replace the C3 module with the C2f module.Replace the first 6x6 Conv with 3x3 Conv in the Backbone.Delete two Convs (No.10 and No.14 in the YOLOv5 config).Replace the first 1x1 Conv with 3x3 Conv in the Bottleneck.Use…

使用Docker进行Jmeter分布式搭建

大家好,随着技术的不断发展,对性能测试的要求也日益提高。在这样的背景下,如何利用 Docker 来巧妙地搭建 Jmeter 分布式成为了关键所在。现在,就让我们开启这场探索之旅,揭开其神秘的面纱。前段时间给大家分享了关于 L…

Linux上编译安装和卸载软件

在maven官网下载maven时候,看到maven-3.9.5这个版本有2份安装包,一个是binaries,一个是source binaries是已编译好的文件,可以直接使用的版本;source是源代码版本,需要自己编译 源码的安装一般由这三个步…

nn.BatchNorm中affine参数的作用

在PyTorch的nn.BatchNorm2d中,affine参数决定是否在批归一化(Batch Normalization)过程中引入可学习的缩放和平移参数。 BN层的公式如下, affine参数决定是否在批归一化之后应用一个可学习的线性变换,即缩放和平移。具…

信息系统项目管理师0601:项目立项管理 — 考点总结(可直接理解记忆)

点击查看专栏目录 项目立项管理 — 考点总结(可直接理解记忆) 1.项目建议书(又称立项申请)是项目建设单位向上级主管部门提交项目申请时所必须的文件,是对拟建项目提出的框架性的总体设想。在项目建议书批准后,方可开展对外工作(掌握)。 2.项目建议书应该包括的核心内…

k8s 二进制安装 详细安装步骤

目录 一 实验环境 二 操作系统初始化配置(所有机器) 1,关闭防火墙 2,关闭selinux 3,关闭swap 4, 根据规划设置主机名 5, 做域名映射 6,调整内核参数 7, 时间同步 三 部署 dock…

redis7基础篇2 redis的3种模式(主从,哨兵,集群)模式

一 主从复制模式 1.1 主从模式 主从模式: 主机可以读,写,重机只能写操作。 主机shutdown后,从机上位还是原地待命:从机不动,原地待命,数据正常使用,等待主机重启归来。 主机shu…