实验19:中介者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解中介者模式的动机,掌握该模式的结构;

2、能够利用中介者模式解决实际问题。

 

[实验任务一]:虚拟聊天室

虚拟聊天室实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:

1. 新的具体聊天室中发送的图片大小不得超过20M

2. 新的具体聊天室中发送的文字长度不得超过100个字符。

3. 新的具体会员类可以发送图片信息和文本信息。

4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。

修改客户端测试类,注意原有系统类代码和客户端代码的修改。

实验要求:

1. 画出对应的类图

2. 提交源代码

3注意编程规范。

 

 

 

public abstract class AbstractChatroom

{

public abstract void register(Member member);

public abstract void sendText(String from,String to,String message);

public abstract void sendImage(String from,String to,String message);

}

 

 

import java.util.*;

 

public class ChatGroup extends AbstractChatroom

{

private Hashtable members=new Hashtable();

 

public void register(Member member)

{

if(!members.contains(member))

{

members.put(member.getName(),member);

member.setChatroom(this);

}

}

 

   public void sendText(String from,String to,String message)

   {

      Member member=(Member)members.get(to);

      String newMessage=message;

      newMessage=message.replaceAll("","*");

  member.receiveText(from,newMessage);

   }

   

   public void sendImage(String from,String to,String image)

   {

      Member member=(Member)members.get(to);

      //模拟图片大小判断

      if(image.length()>5)

      {

         System.out.println("图片太大,发送失败!");

      }

      else

      {

         member.receiveImage(from,image);

      }

   }

}

 

 

public class Client

{

public static void main(String args[])

{

AbstractChatroom happyChat=new ChatGroup();

Member member1,member2,member3,member4,member5;

member1=new DiamondMember("张三");

member2=new DiamondMember("李四");

member3=new CommonMember("王五");

member4=new CommonMember("小芳");

member5=new CommonMember("小红");

 

happyChat.register(member1);

happyChat.register(member2);

happyChat.register(member3);

happyChat.register(member4);

happyChat.register(member5);

 

member1.sendText("李四","李四,你好!");

member2.sendText("张三","张三,你好!");

member1.sendText("李四","今天天气不错,有日!");

member2.sendImage("张三","一个很大很大的太阳");

member2.sendImage("张三","太阳");

member3.sendText("小芳","还有问题吗?");

member3.sendText("小红","还有问题吗?");

member4.sendText("王五","没有了,谢谢!");

member5.sendText("王五","我也没有了!");

member5.sendImage("王五","谢谢");

}

}

 

 

 

 

public class CommonMember extends Member

{

public CommonMember(String name)

{

super(name);

}

 

public void sendText(String to,String message)

{

    System.out.println("普通会员发送信息:");

    chatroom.sendText(name,to,message);  //发送

}

 

public void sendImage(String to,String image)

{

System.out.println("普通会员不能发送图片!");

}

}

 

 

public class DiamondMember extends Member

{

public DiamondMember(String name)

{

super(name);

}

 

public void sendText(String to,String message)

{

    System.out.println("钻石会员发送信息:");

    chatroom.sendText(name,to,message);  //发送

}

 

public void sendImage(String to,String image)

{

System.out.println("钻石会员发送图片:");

    chatroom.sendImage(name,to,image);  //发送

}

}

 

 

 

public abstract class Member

{

protected AbstractChatroom chatroom;

protected String name;

 

public Member(String name)

{

this.name=name;

}

 

public String getName()

{

return name;

}

 

public void setName(String name)

{

this.name=name;

}

 

public AbstractChatroom getChatroom()

{

return chatroom;

}

 

    public void setChatroom(AbstractChatroom chatroom)

    {

     this.chatroom=chatroom;

    }

 

public abstract void sendText(String to,String message);

public abstract void sendImage(String to,String image);

 

    public void receiveText(String from,String message)

    {

     System.out.println(from + "发送文本给" + this.name + ",内容为:" + message);

    }

    

    public void receiveImage(String from,String image)

    {

     System.out.println(from + "发送图片给" + this.name + ",内容为:" + image);

    }

}

 

posted on 2025-01-06 15:30    阅读(8)  评论(0)    收藏  举报