首页 > 编程语言 >中介者模式javac++

中介者模式javac++

时间:2022-12-23 17:12:47浏览次数:38  
标签:java string void 中介 name Member c++ public String

软件设计                  石家庄铁道大学信息学院

 

实验19:中介者模式

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

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

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

 

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

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

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

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

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

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

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

实验要求:

1. 提交源代码;

 

 

 

 

2. 注意编程规范。

 

 

 

package test19;

public abstract class AbstractChatroom {
    public abstract void register(Member m);
    public abstract void sendtext(String a,String b,String mess);
    public abstract void sendimage(String a,String b,String mess);
}
package test19;

import java.util.*;

public class ChatGroup extends AbstractChatroom{
    private Hashtable ms=new Hashtable();
    public void register(Member m)
    {
        if(!ms.contains(m)){
            ms.put(m.getname(),m);
            m.setroom(this);
        }
    }
    public void sendtext(String a,String b,String c){
        Member m=(Member)ms.get(b);
        String newm=c;
        newm=c.replaceAll("日","*");
        m.receivetext(a,newm);
    }
    public void sendimage(String a,String b,String c){
        Member m=(Member)ms.get(b);
        if(c.length()>5){
            System.out.println("图片较大,发送失败");
        }else{
            m.receiveimage(a,c);
        }
    }
}
package test19;

public class CommonMember extends Member{
    public CommonMember(String a){
        super(a);
    }
    public void sendtext(String a,String c){
        System.out.println("普通会员发送消息");
        room.sendtext(name,a,c);
    }
    public void sendimage(String a,String c){
        System.out.println("普通会员不能发送图片");
    }
}
package test19;

public class DiamondMember extends Member{
     public DiamondMember(String a){
               super(a);
            }
     public void sendtext(String a,String c){
                System.out.println("钻石会员发送消息");
                room.sendtext(name,a,c);
             }
     public void sendimage(String a,String c){
              System.out.println("钻石会员发送图片");
              room.sendimage(name,a,c);
           }
 }
package test19;

public class main {
    public static void main(String args[]){
        AbstractChatroom r1=new NewGroup();
        Member m1,m2,m3;
        m1=new NewMember("小张");
        m2=new NewMember("小龚");
        m3=new NewMember("小橘");
        r1.register(m1);
        r1.register(m2);
        r1.register(m3);
        m1.sendtext("小张",":小张,你好");
        m2.sendtext("小龚",":小龚,你好");
        m1.sendtext("小张",":你在家吗?");
        m2.sendtext("小龚",":在");
        m1.sendtext("小橘",":---------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
        m3.sendimage("小龚",":哈哈.jpg");
        m2.sendimage("小橘",":哈哈.jpg--------------------");
    }
}
package test19;

public abstract class Member {
    protected AbstractChatroom room;
    protected String name;
    public Member(String a){
        name=a;
    }
    public String getname(){
        return name;
    }
    public void setname(String a){
        name=a;
    }
    public AbstractChatroom getroom(){
        return room;
    }
    public void setroom(AbstractChatroom a){
        room=a;
    }
    public abstract void sendtext(String a,String mess);
    public abstract void sendimage(String a,String image);
    public void receivetext(String a,String mess){
        System.out.println(a+"发送的给"+name+"内容是"+mess);
    }
    public void receiveimage(String a,String image){
        System.out.println(a+"发送的给"+name+"内容是"+image);
    }
}
package test19;

import java.util.HashMap;
import java.util.Map;
public class NewGroup extends AbstractChatroom{

    Map<String,Member> table = new HashMap<>();
    public void register(Member member) {
        table.put(member.getname(), member);
        member.setroom(this);
    }

    public void sendtext(String from, String to, String message) {
        if(message.length()>=100){
            System.out.println("超过100个字符,发送失败");
        }else{
            Member member = table.get(to);
            if(member!=null)
                member.receivetext(from, message);
        }
    }

    public void sendimage(String from, String to, String message) {
        if(message.length()>=20){
            System.out.println("图片超过20M,发送失败");
        }else{
            Member member = table.get(to);
            if(member!=null)
                member.receiveimage(from, message);
        }
    }

}
package test19;

public class NewMember extends Member{
    public NewMember(String a){
        super(a);
    }
    public void sendtext(String a,String c){
        System.out.println("新会员发送消息:");
        room.sendtext(name,a,c);
    }
    public void sendimage(String a,String c){
        System.out.println("新会员发送图片:");
        room.sendimage(name,a,c);
    }
}
#include<iostream>
#include<map>
#include<ctime>
#include<sstream>
using namespace std;
class AbstractChatroom;
//抽象同事类
class Member {
protected :
    AbstractChatroom *chatroom;
    string name;
public:
    Member(string name) {
        this->name=name;
    }
    AbstractChatroom* getChatroom() {
        return chatroom;
    }
    void setChatroom(AbstractChatroom *chatroom) {
        this->chatroom = chatroom;
    }
    string getName() {
        return name;
    }
    void setName(string name) {
        this->name = name;
    }
    virtual void sendText(string to,string message)=0;
    virtual void sendImage(string to,string image)=0;
    void receiveText(string from,string message) {
        cout<<from<<"发送文本给"<<this->name<<",内容为:"<<message<<endl;
    }
    void receiveImage(string from,string image) {
        cout<<from<<"发送图片给"<<this->name<<",内容为:"<<image<<endl;
    }
};
string replace(string strSrc,const string &oldStr, const string &newStr,int count=-1)
{
    string strRet=strSrc;
    size_t pos = 0;
    int l_count=0;
    if(-1 == count) //替换所有
        count = strRet.size();
    while ((pos = strRet.find(oldStr, pos)) != string::npos)
    {
        strRet.replace(pos, oldStr.size(), newStr);
        if(++l_count >= count) break;
        pos += newStr.size();
    }
    return strRet;
}
//抽象中介者类
class AbstractChatroom {
public:
    virtual void registers(Member *member)=0;
    virtual void sendText(string from,string to,string message)=0;
    virtual void sendImage(string from,string to,string image)=0;
};
//具体中介者类
class ChatGroup: public AbstractChatroom{
private:
    map<string, Member*> members;
    map<string, Member*>::iterator iter;
public:
    void registers(Member *member) {
        iter=members.find(member->getName());
        if(iter==members.end()) {
            members.insert(map<string, Member*>::value_type(member->getName(),member));
            member->setChatroom(this);
        }
    }
    void sendText(string from, string to, string message) {
        Member *member=members.find(to)->second;
        string newMessage=message;
        newMessage=replace(message,"日", "*");
        member->receiveText(from, newMessage);
    }
    void sendImage(string from, string to, string image) {
        Member *member= members.find(to)->second;
        if(image.length()>5) {
           cout<<"图片太大,发送失败"<<endl;
        }
        else {
            member->receiveImage(from, image);
        }
    }
};
//具体中介者类
class NewChat:public AbstractChatroom{
private:
    map<string, Member*> members;
    map<string, Member*>::iterator iter;
public:
    void registers(Member *member) {
       iter=members.find(member->getName());
        if(iter==members.end()) {
            members.insert(map<string, Member*>::value_type(member->getName(),member));
            member->setChatroom(this);
        }
    }
    void sendText(string from, string to, string message) {
        Member *member=members.find(to)->second;
        string newMessage=message;
        newMessage=replace(message,"日", "*");
        if(message.length()>100) {
            cout<<"发送的文字长度不得超过100个字符,发送失败"<<endl;
        }
        else {
            member->receiveText(from, newMessage);
        }
    }
    void sendImage(string from, string to, string image) {
        Member *member=members.find(to)->second;
        if(image.length()>20) {
            cout<<"图片大小不得超过20M,发送失败"<<endl;
        }
        else {
            member->receiveImage(from, image);
        }
    }
};
//具体同事类
class CommonMember :public Member{
protected :
    string name;
public:
    CommonMember(string name):Member(name) {
        this->name=name;
    }
    void sendText(string to, string message) {
        cout<<"普通会员发送消息:"<<endl;
        chatroom->sendText(this->name, to, message);
    }

    void sendImage(string to, string image) {
        cout<<"普通会员不能发送图片!"<<endl;
    }
};
//具体同事类
class DiamondMember :public Member{
protected :
    string name;
public:
    DiamondMember(string name):Member(name){
        this->name=name;
        }
    void sendText(string to, string message) {
        cout<<"钻石会员发送消息:"<<endl;
        chatroom->sendText(name,to, message);
    }
    void sendImage(string to, string image) {
        cout<<"钻石会员发送图片:"<<endl;
        chatroom->sendImage(name, to, image);
    }
};
//具体同事类
class NewMember :public Member{
protected :
    string name;
public:
    NewMember(string name):Member(name){
        this->name=name;
    }
    void sendText(string to, string message) {
        time_t now = time(NULL);
        tm* t = localtime(&now);
        // 将信息输出到字符串流
        stringstream ss;
        stringstream ss2;
        ss << t->tm_year + 1900 << "." << t->tm_mon + 1 << "." <<
            t->tm_mday << ".." << t->tm_hour << "." << t->tm_min << "." << t->tm_sec;
        cout<<"新会员发送消息:"<<endl;
        chatroom->sendText(name,to,message+"  现在时间"+ss.str());
    }
    void sendImage(string to, string image) {
        cout<<"会员发送图片:"<<endl;
        chatroom->sendImage(name, to, image);
    }
};
//测试函数
int main(){
        AbstractChatroom *newChat=new NewChat();
        Member *member1,*member2,*member3,*member4;
        member1=new DiamondMember("小橘");
        member2=new CommonMember("小李");
        member3=new NewMember("小张");
        member4=new NewMember("小龚");

        newChat->registers(member1);
        newChat->registers(member2);
        newChat->registers(member3);
        newChat->registers(member4);

        member1->sendText("小李","小李,你好!");
        member2->sendText("小橘","小橘,你好!");
        cout<<"---------------------------------------------"<<endl;
        member3->sendText("小龚","小龚你好。");
        member3->sendText("小龚","你好小龚!-------------------------------------------------------------------------------------------------");
        member3->sendImage("小龚","哈哈.jpg");
        member4->sendText("小张","你好,小张");
        member4->sendImage("小张","哈哈.jpg--------------------");
}

 

 

标签:java,string,void,中介,name,Member,c++,public,String
From: https://www.cnblogs.com/rongzhang/p/17001117.html

相关文章

  • 备忘录模式javac++
    软件设计                 石家庄铁道大学信息学院 实验 20:备忘录模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解备忘录模......
  • Java中线程的6种状态详解
    java.lang.Thread.State枚举类中定义了六种线程的状态,可以调用线程Thread中的getState()方法获取当前线程的状态。publicenumState{NEW,RUNNABLE,......
  • 代理模式javac++
    软件设计                 石家庄铁道大学信息学院 实验14:代理模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解代理模式的动......
  • 15_Java筑基之Object类、多态
    15_Java筑基之Object类、多态一.Object类Object类是类层次结构的根类,每个类都使用Object作为超类(父类).1.equals()方法指示其他某个对象是否与此对象“相等”.示例代码;......
  • C++ 获取特定进程的CPU使用率
    近来发现笔记本在关闭屏幕后风扇转得特别快,打开屏幕后看任务管理器,风扇马上减速,也没有发现大量占用CPU的进程。于是想写一个小程序在后台记录每个进程的CPU使用情况,揪出锁......
  • 装饰模式javac++
    实验11:装饰模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解装饰模式的动机,掌握该模式的结构;2、能够利用装饰模式解决实际问题。 [实验任务一]:手......
  • Java学习笔记7
    1.API​ API(ApplicationProgrammingInterface):应用程序接口。Java中的API:​ 指的是JDK中提供的各种功能的Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是......
  • windows平台下 c++获取 系统版本 网卡 内存 CPU 硬盘 显卡信息
    GetsysInfo.h:#ifndef_H_GETSYSINFO#define_H_GETSYSINFO#pragmaonce#include<afxtempl.h>classGetSysInfo{public:GetSysIn......
  • java处理excel文件的读写
    简述1、一般会将文件地址作为入参,对文件进行处理2、将文件放到File中:Filefile=newFile(fileName)3、判断文件是否存在:if(!file.exists()){returnnull;}4、将文件......
  • 跨平台C++ DLL导出宏
    #pragmaonce#ifdefined(__GNUC__)#define_DEPRECATED___attribute__((deprecated))#define_FORCE_INLINE___attribute__((always_inline))#elifdefined(_MSC_......