日期:2014-05-19  浏览次数:21071 次

面向对象题目求解!!
国家宝藏
 
设计题目:国家宝藏
本·富兰克林·盖茨(尼古拉斯·凯奇饰)是一个喜爱考古的冒险家。从小就梦想要找到国家宝藏,二十年来这个秘密一直

萦绕在他的心头,现在他决定完成这一梦想。假设我们知道国家宝藏在哪里,并且想设计一个系统,如果尼古拉斯碰触国

家宝藏中的每箱黄金,系统会自动通知宝藏的守护神。  
系统中应该有一个抽象的宝藏类(Treature),宝藏类维护着一个聚集,用于对守护神的跟踪,当宝藏被更动时,通知这

些守护神,这个聚集可以用一个向量(Vector)作为宝藏类的Obs属性来实现。该类提供一系列的保护神管理方法,可以

增加(addObserver())和删除(deleteObserver())宝藏保护神,以及当宝藏状态被更动时,通知(notifyObservers()

)守护神。当然,宝藏类还要有一些辅助方法,比如探测宝藏状态是否改变的方法(hasChanged()),标记宝藏状态已更

动的方法(setChanged())和复位状态变化标志(clearChanged()),以及返回宝藏守护神数目的方法(countObserver

())。  
具体的宝藏如黄金(Gold)也应是一个类,且是宝藏类的子类,维护着自己的状态(State),这可以用String型变量来

实现。当然还有获得状态(getState())和改变状态(setState())的辅助方法,并且当重新设定的状态与原状态不同时,

会通知看护该箱黄金的所有守护神。  
你还可发挥想象力定义其他的具体宝藏类,比如钻石(Diamond)类等等。  
守护神(Eudemon)应是个抽象类或接口,为各种具体的守护神定义一个接口,在得到宝藏的通知时采取行动。这个接口

中只包含一个方法update(),用于宝藏状态改变时,具体的保护神所应采取的行动。  
具体的守护神比如老虎(Tiger)就是一个实现了抽象守护神接口中update()方法的具体守护神。你还可发挥想象力定义

其他的具体守护神类,比如狮子(Lion)类等等。  
最后,尼古拉斯·凯奇(Cage)也是一个类,且是具体类,他将凭借智慧和勇敢,更动(touchTreature())这些国家宝

藏的状态,这可要惊动宝藏的守护神呦......
要求:请根据上面的剧本陈述,设计一个国家宝藏的守护系统,并用Java语言实现你的设计方案。发挥你的想象力吧!  

 


农夫果园  
 
设计题目:农夫果园
一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果:
葡萄:Grape
草莓:Strawberry
苹果:Apple
水果与其他的植物有很大的不同,水果最终是可以采摘食用的。那么一个自然的做法就是建立一个各种水果都适用的接口

,以便与农场里的其他植物区分开。水果接口规定出所有的水果都必须实现的接口,包括任何水果必须具备的方法:种植

plant(),生长grow(),收获harvest()。
Apple类是水果中的一种,因此它实现了水果接口所声明的所有方法。另外,由于苹果是多年生植物,因此多出一个

treeAge性质,描述苹果树的树龄。
Grape类是水果类的一种,也实现Fruit接口中所声明的所有方法。但由于葡萄分为有籽和无籽的两种,因此比通常的水果

多出一个seedless性质。
Strawberry类也是水果的一种,也实现了Fruit接口。
农场的园丁也是系统的一部分,自然要由一个合适的类来代表。这个类就是FruitGardener,它会根据农场老板的要求,

使用factory()方法创建出不同的水果对象,比如苹果(Apple),葡萄(Grape)或草莓(Strawberry)的实例。而如

果接到不合法的要求,会提示错误。
农场的市场调查员也是系统的一部分,也需要一个类代表,这个类是MarketInquirer,它通过inquire()调查今年市场

上哪一种水果热销。
农场的老板也是系统的一部分,仍需要一个类来代表,这个类是FruitBoss,他会根据市场调查员的反馈信息,通知农场

的园丁今年种植哪种水果。
要求:请你根据上述系统需求,用Java语言设计这个农场系统,发挥你的想象力吧!
祝你的农场百果丰收!  
 


夏日麽麽茶
 
设计题目:夏日麽麽茶
在一个茶庄(TeaStall)所使用的系统里,有各种风味的名茶。
茶(Tea)在系统中要用一个类代表,它有一个属性(Flavor)。
茶庄的菜单(TeaMenu)在系统中以用类来表示,也可用接口来实现。其中包含了茶庄中可供顾客点的茶。比如 "西湖龙井

", "洞庭碧螺春 ", "白毫银针 ", "君山银针 ", "黄山毛峰   ", "武夷岩茶 ", "安溪铁观音 ", "信阳毛尖 ", "庐山云雾 ", "

六安瓜片 "等。
茶庄的沏茶员(InfuseMan)是系统中的一个类,他可以根据侍者(Waitor)所下的单,冲泡各种风味的茶,如果订单中

风味的茶已沏好,就直接为侍者提供(getTea())茶;如果还没沏好则先冲泡再给侍者提供。沏茶员负责维护茶壶柜(

teapotCabinet)和冲泡好的风味数(totalFlavors),这些都可作为沏茶员的属性来维护。由于一个茶庄所能提供的风

味数是没有限制的,所以茶壶柜(teapotCabinet)应该能动态调整大小,以容纳下未知数量的茶壶,这可以由一个向量

Vecotor来实现。闭店时,沏茶员可以统计(getTotalFlavors())一天冲泡的风味数。
茶客(TeaClient)也是系统中的一个类,他最喜欢的风味(favoriteFlavor)是一个属性。茶客每天根据菜单点

(whatIsYourFavoriteFlavor())适合自己心情的茶。
侍者(Waitor)也是一个类,他担负着茶客和沏茶员之间的桥梁。他询问茶客最喜欢的风味,并根据顾客的要求下单

(takeOrder())给沏茶员,从沏茶员那里接过茶杯放于茶盘(TeacupTray)上,茶盘也可以用一个向量Vector来表示

,作为侍者的一个属性由侍者维护。侍者将茶盘上的茶杯端给(serveTeacup())顾客。侍者会在一天中,统计自己招

待过的订单数(totalOrders),这可作为侍者的一个属性实现,并在闭店时,统计(getTotalOrders())服务的订单

数。
茶庄(TeaStall)也是系统中的一个类,它聚集了菜单、沏茶员、侍者、顾客,它在创建时会指定一个可容纳的最多顾客

数(CLIENT_MAX_NUM),每天开店(open())时,派出一位沏茶员和一位侍者,并接待最多数量的顾客。侍者迎接顾客

,为顾客下单,沏茶员沏好茶后,侍者会用茶盘将茶端给顾客。每天闭店(close())后,会统计当天的订单数和沏茶

风味数。   要求:你可能玩过大富翁、主题公园、主题医院等策略游戏,这个茶庄系统,就是这类游戏的一个原型,请你

根据上述脚本,用Java语言设计这个主题茶馆,发挥你的想象力吧!
 
茶,
香叶,嫩芽,
慕诗客,爱僧家。