这段代码是模拟两个QQ用户之间互发消息
设计思路:是在所有QQ用户里构造发送消息和接收消息的方法,在服务器类里实例化出一个hashmap,构造一个接收消息方法和构造一个询问方法,接收方法中调用发送消息的用户的发送消息方法,并添加进hashmap里,key值为接收消息用户名,value为发送的消息。在询问方法里返回该map,并且在接受用户的接收方法里调用该函数。
具体实现过程如下:
①:创建消息类
public class Message {
private String from; //来自谁
private String to; //发给谁
private String content; //消息内容
//对属性就行封装
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
②:创建接口,抽象出公用的方法
public interface QQInterface {
//两个通用的抽象函数,在子类中将被实现
void sendMsg(Message msg);
Message receiveMsg(String name);
}
③:创建两个用户类QQ1和QQ2
//用户QQ1,并且继承前面的接口
public class QQ1 implements QQInterface
{
static String qqName = "QQ1";
public static void main(String args[])
{
Message msg = new Message();
msg.setContent("hi");
msg.setFrom("QQ1");
msg.setTo("QQ2");
QQ1 q = new QQ1();
q.sendMsg(msg);
try {
Thread.sleep(1000*10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Message receiveMsg(String name) //实现接口里的抽象方法
{
return null;
}
public void sendMsg(Message msg) //实现接口里的抽象方法
{
QQServer.serverReceiveMsg(msg);
}
}
//创建用户QQ2,继承接口
public class QQ2 implements QQInterface
{
public static void main(String[] args)
{
QQ2 q = new QQ2();
q.receiveMsg("QQ2");
}
//实现接口里的抽象方法
public Message receiveMsg(String name) {
Message msg =QQServer.asked(name);
return msg;
}
//实现接口里的抽象方法
public void sendMsg(Message msg) {
}
}
④:创建Server类
public class QQServer {
static Map<String,Message> serverMap = new HashMap<String,Message>(); //初始化一个HashMap,用来存放发送过来的消息
public static void serverReceiveMsg(Message msg)
{
serverMap.put(msg.getTo(), msg); //对HashMap进行添加元素
System.out.println(msg.getFrom()+" "+msg.getTo()+" "+msg.getContent());
}
public static Message asked(String name)
{
Message msg = serverMap.get(name); //返回HashMap给调用此函数的用户
return msg;
}
}
⑤:创建测试类
public class Test {
public static void main(String args[])
{
//QQ1对QQ2发送消息
Map<String,List<Message>> QQMap = new HashMap<String,List<Message>>();
List<Message> msgList = new ArrayList<Message>();
//第1次
Message msg = new Message();
msg.setFrom("QQ1");
msg.setTo("QQ2");
msg.setContent("HI");
msgList.add(msg);
QQMap.put(msg.getTo(), msgList);
//第2次
msg = new Message();
msg.setFrom("QQ1");
msg.setTo("QQ2");
msg.setContent("How");
msgList.add(msg);
QQMap.put(msg.getTo(), msgList);
List<Message> qq2List = QQMap.get("QQ2");
for(Message m:qq2List)
{
System.out.println(m.getContent());
}
//******************************************
//QQ2对QQ1发送消息
//Map<String,List<Message>> QQMap1 = new HashMap<String,List<Message>>();
List<Message> msgList1 = new ArrayList<Message>();
//第1次
Message msg1 = new Message();
msg1.setFrom("QQ2");
msg1.setTo("QQ1");
msg1.setContent("HIqqqqqqqqq");
msgList1.add(msg1);
QQMap.put(msg1.getTo(), msgList1);
//第2次
msg1 = new Message();
msg1.setFrom("QQ2");
msg1.setTo("QQ1");
msg1.setContent("Howqqqqqqqq");
msgList1.add(msg1);
QQMap.put(msg1.getTo(), msgList1);
//List<Message> qq1List = QQMap.get("QQ1");
msgList1 = QQMap.get("QQ1");
for(Message m: msgList1) //qq1List
{
System.out.println(m.getContent());
}
}
}
运行结果如下:
posted on 2010-10-30 23:39
Soap MacTavish 阅读(713)
评论(1) 编辑 收藏