实验内容:
1. 某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通
过该功能可以将原本存储在手机中的通信录、短信、照片、歌曲等资料一次性全
部拷贝到移动存储介质(例如MMC 卡或SD 卡)中。在实现过程中需要与多个
已有的类进行交互,例如通讯录管理类、短信管理类等。
为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份
功能。

答(类图):

 其中,OneKeyBackup 充当外观角色,ContactManager、MessageManager 和
FileManager 充当子系统角色。

2. 在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基
础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方
法method()调用之前输出“方法method()被调用,调用时间为2022-12-12
10:10:10”,调用之后如果没有抛异常则输出“方法method()调用成功”,否则输
出“方法method()调用失败”。
在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块
的结构,绘制类图并编程模拟实现。

答(类图):

 3. 为了实现一些特殊的显示效果,某公司欲开发一款手机数码照片处理软
件,在该软件中为照片(Photograph)提供了多种滤镜(Filter)效果,例如黑白滤镜
(BlackWhiteFilter)、单色滤镜(MonochromaticFilter)、怀旧滤镜(NostalgicFilter)等,
不同的滤镜通过不同的算法对照片进行美化,如下图所示。

 该软件可以灵活地增加一些新的滤镜效果。
现采用策略模式进行设计,绘制对应的类图并编程模拟实现。

答(类图):

 4. 某公司欲开发一套机房监控系统,如果机房达到某一指定温度,温度传感
器(Thermosensor)将自动传递信号给各种响应设备,例如警示灯(CautionLight)将
闪烁(flicker()) 、报警器(Annunciator) 将发出警报(alarm()) 、安全逃生门
(SecurityDoor)将自动开启(open())、隔热门(InsulatedDoor)将自动关闭(close())等,
每一种响应设备的行为由专门的程序来控制。为了将来能够方便地引入新类型的
响应设备,采用观察者模式和适配器模式设计并模拟实现该系统。

答(类图):

 5. 在某FPS 游戏中提供了一个游戏管理器(Game Manager),通过该管理器用
户可以对音效(Sound Effect)、场景(Scene)、游戏角色(Role)等对象进行参数设置。
为了节约系统资源并且保证对象状态的一致性,在游戏运行时,用户只能打开唯
一的一个管理器界面。
根据以上描述,请选择两种合适的设计模式设计该游戏管理器,在实现对多
个对象进行统一设置的同时保证游戏管理器的唯一性。
请给出这两种设计模式的名称,结合实例绘制对应的类图(类名、方法名和
属性名可自行定义)。

答(类图):

外观模式(Facade Pattern)和单例模式(Singleton Pattern)

 6. 为了让游戏场景呈现更加逼真的效果,在某FPS 游戏中可以对场景(Scene)
的光照效果等进行渲染(Rendering)。考虑到系统的可扩展性,开发人员可以实现
表面渲染(Surface Rendering)和体渲染(Volume Rendering)等算法,也可以调用一
些已有的渲染引擎(Render Engine)中的渲染算法。在设计时需要考虑到渲染算法
的可复用性,并能够灵活地更换和增加新的渲染效果。
根据以上描述,请选择两种合适的设计模式设计该场景渲染模块,一方面保
证可以方便地调用已有的渲染算法,另一方面还可以方便地嵌入新的算法。
请给出这两种设计模式的名称,结合实例绘制对应的类图(类名、方法名和
属性名可自行定义)。

答(类图):

策略模式(Strategy Pattern)和适配器模式(Adapter Pattern)

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐