zoukankan      html  css  js  c++  java
  • 设计模式 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("小王", "笑脸");
    }
  • 相关阅读:
    密码学概述
    密码学概述
    Hibernate初探之单表映射——第二章:Hibernate进阶
    Hibernate初探之单表映射——通过Hibernate API编写访问数据库的代码
    Hibernate初探之单表映射——使用Junit进行测试
    Hibernate初探之单表映射——创建对象-关系映射文件
    Hibernate初探之单表映射——创建持久化类
    Hibernate初探之单表映射——创建Hibernate的配置文件
    Hibernate初探之单表映射——jar包的导入
    Hibernate初探之单表映射——Hibernate概念及插件的安装
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15559625.html
Copyright © 2011-2022 走看看