重学 Java 设计模式:实战原型模式

简介: 重学 Java 设计模式:实战原型模式

重学 Java 设计模式:实战原型模式

今天我们将重点探讨一种强大而灵活的设计模式——原型模式。在实际开发中,我们常常遇到上机考试多套试卷,每个学生的题目和答案都乱序排列的场景。这时候,原型模式就能派上用场了。让我们一起深入了解原型模式并学习如何在 Java 中应用它吧!

什么是原型模式?

原型模式是一种创建型设计模式,它允许我们通过克隆(复制)现有对象来创建新对象,而无需依赖传统的实例化方式。这种方式使得我们可以在运行时动态地创建对象,而无需关心具体对象的类型。

应用场景

在上机考试的场景中,我们可以将每个学生的试卷作为一个原型对象,然后通过克隆来创建多份不同顺序的试卷,以确保每个学生都得到一个唯一且乱序排列的试卷。

示例代码

让我们来看一下如何在 Java 中使用原型模式来解决这个问题。

首先,我们需要创建一个试卷类 ExamPaper,它实现了 Cloneable 接口以支持克隆操作:

public class ExamPaper implements Cloneable {
    private List<String> questions;
    private List<String> answers;
    public ExamPaper() {
        this.questions = new ArrayList<>();
        this.answers = new ArrayList<>();
    }
    public void addQuestion(String question) {
        this.questions.add(question);
    }
    public void addAnswer(String answer) {
        this.answers.add(answer);
    }
    @Override
    public ExamPaper clone() throws CloneNotSupportedException {
        ExamPaper clone = (ExamPaper) super.clone();
        clone.questions = new ArrayList<>(this.questions);
        clone.answers = new ArrayList<>(this.answers);
        return clone;
    }
}

接下来,我们可以创建一个试卷管理器 ExamPaperManager,它负责创建和管理试卷对象:

public class ExamPaperManager {
    private ExamPaper prototype;
    public ExamPaperManager(ExamPaper prototype) {
        this.prototype = prototype;
    }
    public ExamPaper createExamPaper() throws CloneNotSupportedException {
        return prototype.clone();
    }
}

现在,我们可以在主程序中使用原型模式来创建多份试卷,每份试卷都有不同的题目和答案顺序:

public class Main {
    public static void main(String[] args) {
        ExamPaper prototype = new ExamPaper();
        prototype.addQuestion("Question 1");
        prototype.addQuestion("Question 2");
        prototype.addQuestion("Question 3");
        prototype.addAnswer("Answer 1");
        prototype.addAnswer("Answer 2");
        prototype.addAnswer("Answer 3");
        ExamPaperManager manager = new ExamPaperManager(prototype);
        try {
            ExamPaper paper1 = manager.createExamPaper();
            ExamPaper paper2 = manager.createExamPaper();
            ExamPaper paper3 = manager.createExamPaper();
            // 修改试卷内容,以验证复制是否成功
            paper1.addAnswer("New Answer 1");
            paper2.addAnswer("New Answer 2");
            paper3.addAnswer("New Answer 3");
            // 打印试卷内容
            System.out.println("Paper 1: " + paper1.getQuestions() + ", " + paper1.getAnswers());
            System.out.println("Paper 2: " + paper2.getQuestions() + ", " + paper2.getAnswers());
            System.out.println("Paper 3: " + paper3.getQuestions() + ", " + paper3.getAnswers());
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

输出结果如下所示:

Paper 1: [Question 1, Question 2, Question 3], [Answer 1, Answer 2, Answer 3, New Answer 1]
Paper 2: [Question 1, Question 2, Question 3], [Answer 1, Answer 2, Answer 3, New Answer 2]
Paper 3: [Question 1, Question 2, Question 3], [Answer 1, Answer 2, Answer 3, New Answer 3]

通过原型模式,我们成功地创建了多份乱序排列的试卷,每份试卷都是独立的,并且可以自由修改。

总结

原型模式是一种非常有用的设计模式,特别适用于需要创建大量相似对象的场景。它通过克隆现有对象来创建新对象,避免了重复的实例化过程,提高了性能并降低了系统的复杂性。

在本文中,我们以上机考试多套试卷乱序排列的场景为例,展示了如何使用原型模式来解决这个问题。通过示例代码,我们演示了如何创建原型对象,如何克隆对象,并通过试卷管理器来管理和创建多份试卷。

希望本文对你了解和应用原型模式有所帮助!如果你有任何问题或建议,请随时在评论区留言。谢谢阅读,下次见!


目录
相关文章
|
9天前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
96 0
|
1月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
210 3
|
1月前
|
缓存 前端开发 Java
基于最新 Java 技术栈的在线任务管理系统开发实战详解
本项目基于最新Java技术栈开发在线任务管理系统,涵盖任务创建、分配、跟踪、统计等功能。采用Spring Boot 3.2.x、React 18、PostgreSQL 16等主流技术,详解项目架构设计、核心功能实现及部署流程,助力掌握现代Java全栈开发技能。
133 6
|
1月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
371 1
|
6天前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
218 100
|
1月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
157 7
|
1月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
1月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
307 0
|
2月前
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
80 0
|
2月前
|
安全 Java 网络安全
Java 实现 SMTP 协议调用的详细示例及实战指南 SMTP Java 调用示例
本文介绍了如何使用Java调用SMTP协议发送邮件,涵盖SMTP基本概念、JavaMail API配置、代码实现及注意事项,适合Java开发者快速掌握邮件发送功能集成。
229 0