动态

详情 返回 返回

學習設計模式找不到練手的實戰項目?項目已開源 - 动态 详情

手寫解析器、渲染器、主題樣式、自定義彈窗和精細的撤銷/恢復機制等。

📌整體總結

YtyMark-java 項目,從用户輸入到用户查看到實時渲染結果的全過程

image

  • 監聽文本區域內容是否發生變化

  • 解析和渲染:“原始文本的塊裁剪”→“塊級元素解析” → “行內元素解析” → “渲染” 四大階段

  • 將渲染結果重新刷新展示出來

從UI界面到核心的解析渲染,通過一系列設計模式串聯各模塊,實現了高度的模塊化和可擴展性。

構建者模式

用於構造解析器(ParserBuilder)和渲染器(RendererBuilder),將複雜對象的組裝過程與表示分離,使客户端只需按需配置各組件即可得到完整的解析/渲染器實例。

先從核心模塊的這四個階段來看設計模式的使用情況。

📦1. 原始文本的塊裁剪階段

此階段為“塊級元素預處理”階段,將普通文本按照塊級元素進行裁剪。

狀態模式

主要設計模式為狀態模式

在“塊級元素預處理”階段,根據當前處理狀態(如普通文本、列表、引用塊等)動態切換處理邏輯,將不同類型的文本裁剪成塊級元素,避免了大量的條件分支。

通過狀態模式實現類似狀態機的機制,當狀態(語法)匹配時,自動流轉到專門處理這個語法的程序,處理完之後分割成一個“塊”(這個塊就是一個塊元素),再回到默認狀態,然後繼續處理後續的文本。具體代碼位於:org.ytymark.parser.block.state包。

image

📦2. 塊級元素解析階段

責任鏈模式

構建一條解析“流水線”,不同的責任對象按優先級依次嘗試處理當前文本塊或嵌套結構,直到有對象成功解析為止,極大提升瞭解析流程的靈活性。

組合模式

將解析結果組織成一棵 AST(抽象語法樹)塊級元素節點樹,節點既可作為葉子,也可包含子節點,這個階段標題、段落和水平分割線只能是葉子節點,統一對外提供相同的接口,便於樹形結構的構建與遍歷。

整個處理流程,如圖:

image

關於涉及的相關代碼,可以查看專門簡述核心功能那篇文章。

🗂3. 行級元素的解析階段

策略模式

動態選擇不同的行內元素解析策略(例如鏈接、加粗、斜體等)以及界面的主題渲染策略(淺色/暗黑主題),通過統一接口切換算法或樣式實現。

組合模式+迭代器模式

通過迭代器結合遞歸來遍歷節點樹,為 AST 提供統一的遍歷方式。在解析階段,用於遍歷塊級元素進行行內元素解析;在渲染階段,遍歷節點樹完成渲染操作。

使用迭代器完成兄弟節點的遍歷(廣度遍歷),再結合遞歸完成子節點遍歷(深度遍歷)。

🧩4. 渲染階段

中介者模式思想

在 AST、解析器、渲染器之間引入中介邏輯,解耦它們的直接依賴,使得解析和渲染兩者可以靈活組合,支持輸出到不同類型的文檔。

image

訪問者模式

將節點數據結構與渲染行為分離,在塊級和行級元素解析和渲染時,訪問者對象負責執行相應操作,以解決嵌套調用的複雜性並提高擴展性。在渲染的過程中,組合模式+迭代器模式起到非常關鍵的作用,在渲染階段,使用迭代器完成兄弟節點的遍歷(廣度遍歷),再結合遞歸完成子節點遍歷(深度遍歷),完成節點樹的渲染操作。

image

後面介紹以工具界面、操作相關的功能。

📍5. 樣式相關功能

工廠模式

在渲染器中,根據不同場景創建對應的樣式或渲染器實例,如PDF 等輸出的字體、顏色工廠。

觀察者模式和單例模式

監聽主題(暗黑/淺色)變化或 JavaFX 屬性變化,觸發重新渲染文本內容,保持 UI 與主題狀態同步。主題監聽器將有主題管理類來統一管理,並結合單例模式,使得主題管理器全局唯一,並提供統一訪問入口ThemeManager.getInstance()

🎯6. 自定義彈框

自定義通用彈框,在此基礎上根據不同場景進行不同的裝飾

裝飾模式

對基礎彈框組件進行功能性擴展,在不同場景下動態增加或修改對話框行為和樣式,而無需改動原有組件代碼。

📝7. 編輯操作

命令模式和備忘錄模式

將菜單項、工具欄按鈕、快捷鍵等操作封裝為命令對象,支持撤銷/重做、宏命令等功能的統一管理。以單次輸入為粒度保存編輯歷史,實現精細化的撤銷與重做,支持一千步的撤銷/重做,並預留撤銷/重做的開啓或關閉。

📸8. 界面截圖預覽

白天模式的截圖:

image

夜間模式的截圖:

image

✏️9. 總結

以上即為 YtyMark-java 項目所用的主要設計模式及其在各個功能模塊中的應用場景,既展現了設計模式的實戰價值,也為後續擴展與維護打下了堅實基礎。

🙌我的開源項目地址

🌍 GitHub 開源地址(YtyMark-java)

歡迎提交 PR、Issue、Star ⭐️!

如果需要單獨學習這些設計模式,可以在微信公眾號回覆:設計模式,來獲取《掌握設計模式:23種經典模式實踐、選擇、價值與思想》pdf手冊。

image

查看往期設計模式文章的:設計模式

超實用的SpringAOP實戰之日誌記錄

2023年下半年軟考考試重磅消息

通過軟考後卻領取不到實體證書?

計算機算法設計與分析(第5版)

Java全棧學習路線、學習資源和麪試題一條龍

軟考證書=職稱證書?

軟考中級--軟件設計師毫無保留的備考分享

Add a new 评论

Some HTML is okay.