设计模式 C++中介者模式 聊天室

#include <iostream>
#include <list>
#include<algorithm>
#include<sstream>
#include<stack>
#include <queue>
#include<map> 
#define _CRT_SECURE_NO_DEPRECATE;
#define _CRT_SECURE_NO_WARNINGS;
using namespace std;

class Member;
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 Member
{
protected:
    AbstractChatroom* chatroom;
    string name;
public:
    Member(string name)
    {
        this->name = name;
    }
    string getName()
    {
        return name;
    }
    void setName(string name)
    {
        this->name = name;
    }
    AbstractChatroom* getChatroom()
    {
        return chatroom;
    }
    void setChatroom(AbstractChatroom* chatroom) {
        this->chatroom = chatroom;
    }
    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 + "\n";
    }

    void receiveImage(string from, string image) {
        cout << from + "发送图片给" + this->name + ",内容为:" + image + "\n";
    }
};
class AddGroup :public AbstractChatroom
{
private:
    map<string, Member*> members;
public:
    void registers(Member* member)
    {
        if (members.count((*member).getName()) == 0)
        {
            members[(*member).getName()] = member;
            (*member).setChatroom(this);
        }
    }
    void sendText(string from, string to, string message)
    {
        Member* member = (Member*)members[to];//得到要接受消息的会员
        if (message.length() > 100) {
            cout << "文本太长,发送失败\n";
        }
        else {
            string newMessage = message;
            int i = message.find("");
            if (i != -1) 
            {
                newMessage = message.replace(i, 1, "*");
            }
            (*member).receiveText(from, newMessage);
        }
    }
    void sendImage(string from, string to, string image) {
        Member* member = (Member*)members[to];
        if (image.length() > 20) {
            cout << "图片太大,发送失败\n";
        }
        else {
            (*member).receiveImage(from, image);
        }
    }
};
class AddMember :public Member
{
public:
    AddMember(string name) :Member(name) {};
    void sendText(string to, string message)
    {
        time_t tt = time(NULL);
        tm* t = localtime(&tt);
        printf("(%d-%02d-%02d %02d:%02d:%02d)",
            t->tm_year + 1900,
            t->tm_mon + 1,
            t->tm_mday,
            t->tm_hour,
            t->tm_min,
            t->tm_sec);
        cout << "新增会员发送消息:\n";
        (*chatroom).sendText(name, to, message);
    }
    void sendImage(string to, string image)
    {
        time_t tt = time(NULL);
        tm* t = localtime(&tt);
        printf("(%d-%02d-%02d %02d:%02d:%02d)",
            t->tm_year + 1900,
            t->tm_mon + 1,
            t->tm_mday,
            t->tm_hour,
            t->tm_min,
            t->tm_sec);
        cout << "新增会员发送图片:\n";
        (*chatroom).sendImage(name, to, image);
    }
};
int main()
{
    cout<<"现在正在使用新增聊天室\n";
    AbstractChatroom* addChat=new AddGroup();
    Member* addMember1;
    Member* addMember2;
    addMember1 = new AddMember("大王");
    addMember2 = new AddMember("小王");
    (*addChat).registers(addMember1);
    (*addChat).registers(addMember2);
    (*addMember2).sendText("大王", "大王,有什么吩咐吗");
    (*addMember1).sendText("小王", "给我泡杯红茶");
    (*addMember2).sendText("大王", "好的,大王");
    (*addMember1).sendImage("小王", "笑脸笑脸笑脸笑脸笑脸笑脸笑脸笑脸笑脸笑脸笑脸");
    (*addMember2).sendText("大王", "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
    (*addMember1).sendImage("小王", "笑脸");
}

 

posted @ 2021-11-16 09:33  风吹过半夏  阅读(40)  评论(0编辑  收藏  举报