<>UnixService<>AbstractFactory+provideService() : void+createWin() : WinService+createUnix() : UnixServicebasicUnix+provideService() : voidSeniorUnix+provideService() : voidSuperUnix+provideService() : voidBasicFactory+createWin() : WinService+createUnix() : UnixServiceSeniorFactory+createWin() : WinService+createUnix() : UnixServiceSuperFactory+createWin() : WinService+createUnix() : UnixService<>WinService+provideService() : voidBasicWin+provideService() : voidSeniorWin+provideService() : voidSuperWin+provideService() : void错误!未找到引用源。
图 2 抽象工厂模式解决win、Unix服务创建问题
3. 生成器模式可以用于描述肯德基KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食
(如汉堡、牛肉饭等)、配餐(如新奥尔良烤翅、香辣鸡翅、吮指原味鸡等)和饮料(如果汁、可乐等)等三个组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。套餐假设目前有如下几个套餐:午餐套餐(Lunch Suit)、晚餐套餐(Supper Suit)、豪华套餐(Luxury Suit)。请用生成器模式设计该应用,画出其设计类图。 答:参见图 3
Client+main()<>KFCBuilderKFCDirector-kfcBuilder : KFCBuilder+setKFCBuilder()+constructSuit()11+createMainFood()+createMatchFood()+createDrinker()+getSuit()LunchSuitBuilder+createMainFood()+createMatchFood()+createDrinker()+getSuit()SupperSuitBuilder+createMainFood()+createMatchFood()+createDrinker()+getSuit()LuxurySuitBuilder+createMainFood()+createMatchFood()+createDrinker()+getSuit()KFCSuit-MainFood : string-MatchFood : string-Drinker : string+setMainFood(in main : string)+setMatchFood(in match : string)+setDrinker(in drinker : string)图 3 生成器模式——KFC套餐构造
4. 下图所示设计类图是关于游戏软件的设计。在该设计中,SlowGameFactory类负责创建
SlowFighter对象与SlowMonster对象,并且将创建完的对象以其超类类型返回给ClientGUI对象。然后,ClientGUI对象将操纵SlowFighter对象与SlowMonster对象,使得它们互相打斗。
(1) 上述设计使用了什么设计模式?
抽象工厂
(2) 请在以上设计中添加SuperFighter和SuperMonster,SuperFighter与SuperMonster是对应的,请绘制新的设计类图。
修正一下该答案 5. 某公司要设计一个房屋选购系统,系统内的房屋分为三种类型:经济型(Economic
House)、普通型(Normal House)与豪华型(Luxury House)。不同房型的区别体现在面积大小(Area)以及卧室(Bedroom)、卫生间(Bathroom)、车库(Garage)、花园(Garden)、游泳池(Swimming Pool)的数量上。请用生成器模式设计该选购系统,画出设计类图。
(二) chapter 3 结构型设计模式
6. 使用组合模式设计一款使用不同国家的语言做为问候语的软件,需要一个用于用户输入的用
户图形界面。在该用户图形界面上,有各个主要国家的列表。用户可以选择一个国家,然后,单击产生问候语的按钮,程序将显示该国家见面时所使用的问候语。①使用安全形式设计,画出设计类图。②使用透明形式设计,画出设计类图。 答:①参见图 4 ②参见图 5
图 4 组合模式设计-安全形式
图 5 组合模式设计-透明模式
7. 下图所示为一个整数排序的Java程序设计类图。该设计使用类适配器模式。
问题:
(1) 请说明使用该设计有什么问题?
Java是单继承语言,不支持多继承
(2) 画出新的设计类图。
答:参见图 6
<>SortingAlgorithmsBubbleSort+bubbleSort() : int[]1..1BinarySort+binarySort() : int[]+bubbleSort() : int[]+binarySort() : int[]+superQuickSort() : int[]1..1Adapter-bubbleSorter : BubbleSort-binarySorter : BinarySort+bubbleSort() : int[]+binarySort() : int[]+superQuickSort() : int[]11
图 6 对象适配器解决多继承问题