8.
考察一个电源总开关的例子。为了使用方便,一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。通过该电源总开关可以同时控制上述所有电器设备。请使用外观模式设计该系统,画出设计类图。
答:参见图 7
SwitchFacadeClient+main()-lights[] : Light-fan : Fan-airCondition : AirConditioner-tv : Television+turnOnAll()+turnOffAll()Light-position : string+Light(in pos : string)+turnOn()+tunOff()Fan+turnOn()+turnOff()AirConditioner+turnOn()+turnOff()Television+turnOn()+turnOff()
图 7 电源开关的例子
9. 美国和加拿大的邮政编码有不同的格式,美国的邮政编码由5位阿拉伯数字组成加破折号,
再加4位阿拉伯数字组成,即美国的邮政编码形状为ddddd-dddd,其中d是介于0与9之间的整数。加拿大的邮政编码是由6位字母与数字混合组成,格式为:cdc dcd,其中第1,3,5位是英语字母,第2,4,6位是阿拉伯数字,如:M4B 1G5。假设有一个网上贸易软件,原来的客户是美国公民,但是,随着业务的扩展,将要允许加拿大公民使用该系统。假如已经有两个经过充分测试的类,一个是USZipCode,另外一个是CAPostalCode。这两个类中分别有一个方法,isValidZipCode(zip:String), 和isValidCaPostalCode(pcode: String),用于确认用户输入的邮政编码是否正确。虽然这两个接口(方法)的参数都是String类型的,但是方法名字是不同的,而且,它们的具体的确认算法是不同的。现在要写一个网上邮政编码确认程序,该程序使用一个统一的接口,允许客户程序使用该接口的时候,既可以使用美国的邮政编码又可以使用加拿大的邮政编码。请使用适配器模式进行设计,画出设计类图。
<
10. 假如公司需要设计一个特工信息系统。特工的信息被加密并且被存入文本文档或者数据库。
有三种方法加密特工的名字和代码,该加密名字和代码的任务由三个类完成,这三个类是EncryptedInfo1,EncryptedInfo2,EncryptedInfo3。请使用桥接模式设计该特工信息保密系统,画出设计类图。
11. 现需要设计一个可以模拟各种动物行为的机器人。目前,在机器人中已定义了一系列方法:
叫喊方法cry()、移动方法move()。如果希望在不修改已有代码的基础上使得机器人能够像狗一样叫wang(),像狗一样跑run(),使用适配器模式进行设计,绘制设计类图。
<
12.
设计一个飞行员信息管理系统。假设飞行员分为战斗机飞行员和轰炸机飞行员;在性别上又分为男飞行员和女飞行员。请使用桥接模式进行设计,画出设计类图。
Client<>PilotGender-pilotKind : PilotKind+getInfo() : String11<
13. 假设有一个设计类图如下所示。
此类图中包含了几个动物类,Tiger、Dog和Cat,它们都包含各自的功能,三个类相互协作并紧密耦合,以便完成类似于动物世界的游戏功能。请用中介者模式重新设计,保持功能不变,画出设计类图。
可将updateAll()方法修改为doGame(),在doGame()定义游戏规则。
14.
针对如下已经存在的某程序设计图,使用桥接模式重新设计该程序,并画出设计类图
client+main() : void<
文件系统中的文件有不同类型,不同类型的文件其浏览方式有所区别,如文本文件和图片文件、视频文件的浏览方式就不相同。对文件夹的浏览实际上就是对其中所包含文件的浏览,而客户端可以一致地对文件和文件夹进行操作,无须关心它们的区别。请使用组合模式来模拟文件的浏览操作(display),画出设计类图。
<
(三) chapter 4 行为型设计模式
16. 一个计算手机缴费的软件设计如下图所示:
1Directory+display()+add()+getChild(in index : int)+remove()