随笔-10  评论-11  文章-20  trackbacks-0

       这段代码是模拟两个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)  编辑  收藏

评论:
# re: 模拟两个QQ用户互发消息的练习 2012-03-31 20:38 | 以为是qq接口程序呢
弱智!不会写程序别乱发  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问