礼印外盒.
分类: 语文(5) 技术开发(12) 鸽鸽(null) 杂七杂八(4) 歌词(null) 数学(null) 生活(10) 那时(0) 基础知识(null) 阅读(null)

JAVA重构《出师表》

我们将以面向对象的方式重构《出师表》,通过历史事件建模、责任链模式模拟奏表流程。实现完整可运行的《出师表》重构代码,已通过编译验证:

import java.time.LocalDate;

import java.util.ArrayList;

import java.util.List;

// 领域模型接口

interface HistoricalDocument {

    void display();

}

// 作者记录(Java 16+ record)

record Author(String name, String title) {}

// 文档状态枚举

enum DocumentStatus {

    DRAFT, SUBMITTED, ARCHIVED

}

// 皇帝批注记录

record ImperialApproval(String comment, LocalDate approvalDate) {

    public ImperialApproval(String comment) {

        this(comment, LocalDate.now());

    }

}

// 责任链处理器接口

interface SubmissionHandler {

    void setNext(SubmissionHandler handler);

    void handle(DocumentSubmission submission);

}

// 基础处理器实现

abstract class BaseHandler implements SubmissionHandler {

    private SubmissionHandler next;

    @Override

    public void setNext(SubmissionHandler handler) {

        this.next = handler;

    }

    protected void passToNext(DocumentSubmission submission) {

        if (next != null) {

            next.handle(submission);

        }

    }

}

// 出师表核心类

class MemorialToTheEmperor implements HistoricalDocument {

    private final Author author;

    private final List<String> contentSections;

    private DocumentStatus status;

    private ImperialApproval approval;

    public MemorialToTheEmperor(Author author, List<String> content) {

        this.author = author;

        this.contentSections = new ArrayList<>(content);

        this.status = DocumentStatus.DRAFT;

    }

    public void submit(SubmissionHandler handlerChain) {

        updateStatus(DocumentStatus.SUBMITTED);

        DocumentSubmission submission = new DocumentSubmission(this);

        handlerChain.handle(submission);

    }

    @Override

    public void display() {

        System.out.println("╔════════════════════════════════════╗");

        System.out.println("║             出 师 表               ║");

        System.out.println("╠════════════════════════════════════╣");

        System.out.printf("║ 作者: %s%-16s ║\n", author.title(), author.name());

        System.out.println("╠════════════════════════════════════╣");



        contentSections.forEach(section -> {

            System.out.printf("║ %-34s ║\n", section.replaceAll("(.{34})", "$1\n║ "));

            System.out.println("╠════════════════════════════════════╣");

        });



        System.out.printf("║ 状态: %-12s %16s ║\n", status, 

            approval != null ? approval.approvalDate() : "");

        System.out.printf("║ 御批: %-30s ║\n", 

            approval != null ? approval.comment() : "待批阅");

        System.out.println("╚════════════════════════════════