聚焦 论坛 来吧 问答 博客 部落 更多
登录天涯   注册天涯   帮助
 
首页  >  提问列表  >  提问
用JAVA语言实现"国家宝藏"设计方案 [编程 设计]
悬赏点数 10 该提问已被关闭 2个回答 93次浏览
sh602731352 2009-2-25 21:19:15 58.25.133.* 举报
设计题目:国家宝藏
本·富兰克林·盖茨(尼古拉斯·凯奇饰)是一个喜爱考古的冒险家。从小就梦想要找到国家宝藏,二十年来这个秘密一直 萦绕在他的心头,现在他决定完成这一梦想。
假设我们知道国家宝藏在哪里,并且想设计一个系统,如果尼古拉斯碰触国 家宝藏中的每箱黄金,系统会自动通知宝藏的守护神。系统中应该有一个抽象的宝藏类(Treature),宝藏类维护着一个聚集,用于对守护神的跟踪,当宝藏被更动时,通知这 些守护神,这个聚集可以用一个向量(Vector)作为宝藏类的Obs属性来实现。该类提供一系列的保护神管理方法,可以 增加(addObserver())和删除(deleteObserver())宝藏保护神,以及当宝藏状态被更动时,通知(notifyObservers() )守护神。当然,宝藏类还要有一些辅助方法,比如探测宝藏状态是否改变的方法(hasChanged()),标记宝藏状态已更 动的方法(setChanged())和复位状态变化标志(clearChanged()),以及返回宝藏守护神数目的方法(countObserver ())。
具体的宝藏如黄金(Gold)也应是一个类,且是宝藏类的子类,维护着自己的状态(State),这可以用String型变量来 实现。当然还有获得状态(getState())和改变状态(setState())的辅助方法,并且当重新设定的状态与原状态不同时, 会通知看护该箱黄金的所有守护神。
你还可发挥想象力定义其他的具体宝藏类,比如钻石(Diamond)类等等。
守护神(Eudemon)应是个抽象类或接口,为各种具体的守护神定义一个接口,在得到宝藏的通知时采取行动。这个接口中只包含一个方法update(),用于宝藏状态改变时,具体的保护神所应采取的行动。
具体的守护神比如老虎(Tiger)就是一个实现了抽象守护神接口中update()方法的具体守护神。你还可发挥想象力定义 其他的具体守护神类,比如狮子(Lion)类等等。
最后,尼古拉斯·凯奇(Cage)也是一个类,且是具体类,他将凭借智慧和勇敢,更动(touchTreature())这些国家宝 藏的状态,这可要惊动宝藏的守护神呦......
要求:请根据上面的剧本陈述,设计一个国家宝藏的守护系统,并用Java语言实现你的设计方案。发挥你的想象力吧!(其中可能会用到接口.抽象.继承等等)
最佳答案
sh547082011 2009-2-25 21:21:53 58.25.133.* 举报
不知道是不是这个意思:

package cage;

import treature.Diamond;
import treature.Gold;
import treature.Treature;
import eudemon.Eudemon;
import eudemon.Lion;
import eudemon.Tiger;

public class Cage {
public void touchTreature(Treature t){
t.setChanged();
}

public static void main(String[] args) {
Cage cage = new Cage(); //新建一个凯奇对象;
Treature gold = new Gold(); //新建一个黄金对象;
Treature diamond = new Diamond();//新建一个钻石对象;

Eudemon tiger = new Tiger(); //新建一个老虎对象;
Eudemon lion = new Lion(); //新建一个狮子对象;

gold.addObserver(tiger); //为黄金添加守护神
gold.addObserver(lion);

diamond.addObserver(tiger); //为钻石添加守护神

cage.touchTreature(gold); //凯奇动了黄金!
cage.touchTreature(diamond); //凯奇动了钻石!
}
}

package eudemon;

public interface Eudemon {
public void update();
}

package treature;

import java.util.Vector;

import eudemon.Eudemon;

public abstract class Treature {
private String state = "N";
private Vector Obs = new Vector();

public void addObserver(Eudemon e) {
Obs.add(e);
}

public void deleteObserver(Eudemon e) {
Obs.remove(e);
}

public void notifyObservers() {
if(Obs.size() > 0) {
for(int i = 0; i < Obs.size(); i++) {
((Eudemon)Obs.get(i)).update();
}
} else {

}

}

public boolean hasChanges() {
if(state.equalsIgnoreCase("N")){
return false;
} else {
return true;
}
}

public void setChanged() {
if(state.equalsIgnoreCase("N")){
state = "Y";
} else {
state = "N";
}
notifyObservers();
}

public void clearChanged() {
state = "N";
}

public int countObserver() {
return Obs.size();
}
}

package eudemon;

public class Lion implements Eudemon {

public void update() {
System.out.println("我是狮子,宝藏状态已经变动!");
}

}

package eudemon;

public class Tiger implements Eudemon {

public void update() {
System.out.println("我是老虎,宝藏状态已经变动!");
}

}

package treature;

public class Diamond extends Treature {

}

package treature;

public class Gold extends Treature {

}
 
其他回答 按时间排序 按投票数排序
178落叶 2009-2-25 21:20:03 219.146.143.* 举报
给你个思路

readline()方法得到的字符串,

用startwith()判断是否为"Sex"
* 如果是那么输出"Sex = "+你的新变量,
*否则照原样输出,

保存为新文件保存为stu2.txt。

最后将student.txt删除,用stu2.txt文件取代。实现了你要的功能。
 
您可能会感兴趣