首页 > 其他分享 >软件设计-Tutorial19

软件设计-Tutorial19

时间:2024-11-18 08:48:56浏览次数:1  
标签:String 软件设计 Tutorial19 AbstractMember public sendMessage chatRoom void

package Tutorial19;

// 中介者接口
public interface Mediator {
    void sendMessage(AbstractChatRoom chatRoom, AbstractMember member, String message);

    void sendPicture(AbstractChatRoom chatRoom, AbstractMember member, byte[] picture);
}
package Tutorial19;

// 抽象聊天室类
public abstract class AbstractChatRoom {
    protected Mediator mediator;

    public AbstractChatRoom(Mediator mediator) {
        this.mediator = mediator;
    }

    public abstract void sendMessage(AbstractMember member, String message);

    public abstract void sendPicture(AbstractMember member, byte[] picture);
}
package Tutorial19;

// 抽象会员类
public abstract class AbstractMember {
    protected String name;
    protected AbstractChatRoom chatRoom;

    public AbstractMember(String name) {
        this.name = name;
    }

    public void setChatRoom(AbstractChatRoom chatRoom) {
        this.chatRoom = chatRoom;
    }

    public abstract void sendMessage(String message);

    public abstract void sendPicture(byte[] picture);
}
package Tutorial19;

// 新的具体聊天室类,限制发送图片大小和文字长度
public class NewChatRoom extends AbstractChatRoom {
    private static final int MAX_PICTURE_SIZE = 20 * 1024 * 1024; // 20M
    private static final int MAX_TEXT_LENGTH = 100;

    public NewChatRoom(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void sendMessage(AbstractMember member, String message) {
        if (message.length() <= MAX_TEXT_LENGTH) {
            mediator.sendMessage(this, member, message);
        } else {
            System.out.println("发送的文字长度超过限制,无法发送。");
        }
    }

    @Override
    public void sendPicture(AbstractMember member, byte[] picture) {
        if (picture.length <= MAX_PICTURE_SIZE) {
            mediator.sendPicture(this, member, picture);
        } else {
            System.out.println("发送的图片大小超过限制,无法发送。");
        }
    }
}
package Tutorial19;

// 新的具体会员类,可以发送图片和文本信息,并在文本信息后添加时间
import java.text.SimpleDateFormat;
import java.util.Date;

public class NewMember extends AbstractMember {
    public NewMember(String name) {
        super(name);
    }

    @Override
    public void sendMessage(String message) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String timestampedMessage = message + " [" + sdf.format(new Date()) + "]";
        chatRoom.sendMessage(this, timestampedMessage);
    }

    @Override
    public void sendPicture(byte[] picture) {
        chatRoom.sendPicture(this, picture);
    }
}
package Tutorial19;

// 客户端测试类
public class ClientTest {
    public static void main(String[] args) {
        // 创建中介者对象
        Mediator mediator = new Mediator() {
            @Override
            public void sendMessage(AbstractChatRoom chatRoom, AbstractMember member, String message) {
                System.out.println(member.name + " 在 " + chatRoom.getClass().getSimpleName() + " 发送文本消息:" + message);
            }

            @Override
            public void sendPicture(AbstractChatRoom chatRoom, AbstractMember member, byte[] picture) {
                System.out.println(member.name + " 在 " + chatRoom.getClass().getSimpleName() + " 发送图片消息");
            }
        };

        // 创建新的具体聊天室
        NewChatRoom newChatRoom = new NewChatRoom(mediator);

        // 创建新的具体会员
        NewMember member1 = new NewMember("会员1");
        NewMember member2 = new NewMember("会员2");

        // 设置会员所属的聊天室
        member1.setChatRoom(newChatRoom);
        member2.setChatRoom(newChatRoom);

        // 会员发送文本消息
        member1.sendMessage("这是一条不超过100字符的消息");
        member2.sendMessage("我也发一条消息试试");

        // 模拟发送图片(这里只是示例,实际应替换为真实的图片字节数组)
        byte[] samplePicture = new byte[10 * 1024 * 1024]; // 10M大小的示例图片字节数组
        member1.sendPicture(samplePicture);
    }
}

 

标签:String,软件设计,Tutorial19,AbstractMember,public,sendMessage,chatRoom,void
From: https://www.cnblogs.com/muzhaodi/p/18551609

相关文章

  • 软件设计师易错题汇总
    计算机组成原理原码、反码、补码1 2345小阶向大阶对齐,尾数右移6 CPU12 34 5 678 9DMA适合于对大量数据的处理1011校验码12 3 寄存器1234 56数据标识1 存储器1......
  • 软件设计师学习笔记整理
    以下笔记都是基于电子版教材和图书,存于百度网盘中需要自取,仅限于学习,禁止商用,如有侵权,请及时联系:电子图书提取链接:https://pan.baidu.com/s/149F0iwj7DmAVIOQl47dPig提取码:auyn学习视频提取链接:https://pan.baidu.com/s/1RJlM7vk2PZX3X8cw3Z-2zQ提取码:gdju计算机组成与体系......
  • 远光天鹿:重塑数字化时代软件设计新体验
    在当今数字化时代,用户体验已成为衡量软件产品成功与否的关键指标。然而,传统的软件设计模式存在流程繁琐、效率低下、资源浪费等弊端,严重制约了产品创新的步伐。为此,远光软件创新推出高效智能的用户体验创新平台——远光天鹿。 传统设计模式的挑战传统软件设计模式涵盖需求分......
  • 软件设计-Tutorial18
    ```mermaidclassDiagramclassExpression{<<interface>>+interpret()String}classDirection{-Stringdirection+interpret()String}classAction{-Stringaction+inter......
  • 软件设计-Tutorial14
    ```mermaidclassDiagramMatchmakingService<|..RealMatchmakingServiceMatchmakingService<|..MatchmakingProxyclassMatchmakingService{+findPartner()}classRealMatchmakingService{+findPartner()}......
  • 软件设计-Tutorial13
    ```mermaidclassDiagramclassChessPiece{<<abstract>>+Stringcolor+display(intx,inty)}classWhiteChessPiece{+display(intx,inty)}classBlackChessPiece{+display(int......
  • 软件设计-Tutorial12
    packageTutorial12;//定义各个硬件设备和软件的类classMemory{publicbooleancheck(){System.out.println("Memoryself-checking...");//假设返回true表示自检成功returntrue;}}classCPU{publicbooleanrun(){......
  • 4.3软件设计:面对对象的设计
    面对对象设计1、面对对象的架构设计1.1第一步:构造系统的物理模型1.2第二步:设计子系统划分各个子系统的方式定义子系统之间的关系定义子系统的接口1.3第三步:非功能需求设计2、面对对象的用例设计与类设计2.1类2.2类间关系2.3细化用例第一步:定义类的属性第二步:定义......
  • 幼儿早教小程序软件设计与实现毕业设计源码
    博主介绍:✌专注于VUE,小程序,安卓,Java,python,物联网专业,有17年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。研究的背景:随着科技的发展和教育理念的进步,幼儿教育越来越受到重视。然而,传统的幼儿教育模......
  • 软件设计师:排序算法总结
    一、直接插入排序方式:从第一个数开始,拿两个数比较,把后面一位跟前面的数比较,把较小的数放在前面一位二、希尔排序方式:按“增量序列(步长)”分组比较,组内元素比较交换 假设初始关键字:48   37   64   96   75   12   26   58   54   3,有......