重学 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]

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

总结

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

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

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


目录
相关文章
|
16天前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
133 2
|
15天前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
167 0
|
26天前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
194 119
|
3月前
|
设计模式 缓存 Java
Java设计模式(二):观察者模式与装饰器模式
本文深入讲解观察者模式与装饰器模式的核心概念及实现方式,涵盖从基础理论到实战应用的全面内容。观察者模式实现对象间松耦合通信,适用于事件通知机制;装饰器模式通过组合方式动态扩展对象功能,避免子类爆炸。文章通过Java示例展示两者在GUI、IO流、Web中间件等场景的应用,并提供常见陷阱与面试高频问题解析,助你写出灵活、可维护的代码。
|
2月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
233 0
|
2月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
385 100
|
14天前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
172 35
|
14天前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
135 8
|
2月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
778 8
|
2月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
357 12

热门文章

最新文章