行為型設計模式之Interpreter(解釋器)

行為型設計模式之Interpreter(解釋器)

前言:
自己的話理解:自定義一個解釋器用來校驗參數或數據是否合法。

1)意圖

給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語音中的句子。

2)結構

在這里插入圖片描述

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;/*** @author psd 行為設計模式之解釋器模式*/
public class InterpreterPattern {public static void main(String[] args) {Context context = new Context();context.check("江蘇的南京");context.check("南京的一哥");context.check("南京的蕪湖");context.check("安徽的合肥");System.out.println("------------");context.check("合肥的馬鞍山");}
}/*** 表達式接口*/
interface Expression {/*** 解釋器 判斷是否合法* * @param context*            文本信息* @return 是否合法*/boolean interpret(String context);
}class Context{private String[] prefixArr = {"江蘇","安徽","南京"};private String[] suffixArr = {"南京","蘇州","合肥","馬鞍山","蕪湖", "|州","一哥","馬鞍山"};private NonterminalExpression nonterminalExpression;public Context() {TerminalExpression presix = new TerminalExpression(prefixArr);TerminalExpression suffix = new TerminalExpression(suffixArr);nonterminalExpression = new NonterminalExpression(presix,  suffix);}public void check(String info) {boolean result = nonterminalExpression.interpret(info);if (result) {System.out.println("識別成功.....");} else {System.out.println("識別失敗.....");}}
}/*** 非終端表達式*/
class NonterminalExpression implements Expression {private TerminalExpression presix;private TerminalExpression suffix;public NonterminalExpression(TerminalExpression presix, TerminalExpression suffix) {this.presix = presix;this.suffix = suffix;}@Overridepublic boolean interpret(String context) {String[] splitStr = context.split("的");// 判斷前綴和后綴是否合法return presix.interpret(splitStr[0]) && suffix.interpret(splitStr[1]);}
}/*** 終端表達式*/
class TerminalExpression implements Expression {private Set<String> set = new HashSet<>();public TerminalExpression(String[] data) {Collections.addAll(set, data);}/*** 判斷是否合法* * @param context*            文本信息* @return 是否合法*/@Overridepublic boolean interpret(String context) {return set.contains(context);}
}

3)適用性

Interpreter模式適用于當有一個語言需要解釋執行,并且可將該語言中的句子表示為一個抽
象語法樹時,以下情況效果最好:

  • 該文法簡單。對于復雜的發文,文法的類層次變得龐大而無法管理。
  • 效率不是一個關鍵問題。最高效的解釋器通常不是通過直接解釋語法分析樹實現的,
    而是首先將它們轉換成另一種形式。

總結:何時選擇解釋器模式
場景特征 例子
需解析領域特定語言(DSL) 金融公式、業務規則表達式
頻繁處理結構化查詢/過濾條件 自定義日志過濾器、數據查詢
簡單語法且變化不頻繁 數學表達式、布爾邏輯解析
動態執行用戶定義的規則 游戲AI條件、促銷活動規則引擎

喜歡我的文章記得點個在看,或者點贊,持續更新中ing…

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83952.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++常用的企業級日志庫

黃老師跟大家推薦幾款在企業開發中最受歡迎的C++日志庫! 1. spdlog spdlog 是一個非常流行的開源C++日志庫,以其高性能和易用性著稱。它支持多線程、異步日志記錄以及多種格式化選項。 安裝 可以通過包管理器安裝,例如 vcpkg: vcpkg install spdlog示例代碼 #include…

Python讀取PDF:文本、圖片與文檔屬性

在日常的數據采集、文檔歸檔與信息挖掘過程中&#xff0c;PDF格式因其版式固定、內容穩定而被廣泛使用。Python 開發者若希望實現 PDF 內容的自動化提取&#xff0c;選擇一個易用且功能完善的庫至關重要。本文將介紹如何用Python實現 PDF文本讀取、圖片提取 以及 文檔屬性讀取 …

excel中數字不滿六位在左側前面補0的方法

如下圖“代碼”列&#xff0c;想要實現統一的六位&#xff0c;如果不足六位&#xff0c;在前面&#xff08;左側&#xff09;補0。 實現方法&#xff1a; 使用公式TEXT(A2,"000000")注意務必是用雙引號。 目標實現&#xff1a; 如果想要脫離原數據&#xff0c;復制…

軟考 系統架構設計師系列知識點之雜項集萃(82)

接前一篇文章&#xff1a;軟考 系統架構設計師系列知識點之雜項集萃&#xff08;81&#xff09; 第148題 “41”視圖主要用于描述系統邏輯架構&#xff0c;最早由Philippe Kruchten于1995年提出。其中&#xff08; &#xff09;視圖用于描述對象模型&#xff0c;并說明系統應該…

Langgraph實戰--自定義embeding

概述 在Langgraph中我想使用第三方的embeding接口來實現文本的embeding。但目前langchain只提供了兩個類&#xff0c;一個是AzureOpenAIEmbeddings&#xff0c;一個是&#xff1a;OpenAIEmbeddings。通過ChatOpenAI無法使用第三方的接口&#xff0c;例如&#xff1a;硅基流平臺…

(附實例代碼及圖示)混合策略實現 doc-doc 對稱檢索

HyDE 混合策略 在前面的文章中&#xff0c;學習的優化策略都是將對應的 查詢 生成 新查詢&#xff0c;通過 新查詢 來執行相應的檢索&#xff0c;但是在數據庫中存儲的數據一般都是 文檔 層面上的&#xff0c;數據會遠遠比 查詢 要大很多&#xff0c;所以 query 和 doc 之間是…

webui無法注冊如何配置

1. 初始登陸界面 docker部署的腳本為&#xff1a; docker run -d \ -p 8180:8080 --gpusall \ -v ollama:/root/.ollama \ -v /home/pretrained_model/output:/app/backend/output \ --name open-webui \ --restart always ghcr.io/open-webui/open-webui:ollama 2. 新增注冊入…

力扣 88.合并兩個有序數組

文章目錄 題目介紹題解 題目介紹 題解 法一&#xff1a;暴力法 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for(int i 0; i < n; i){nums1[mi] nums2[i];}Arrays.sort(nums1);} }法二&#xff1a;倒序雙指針 時間復雜度為O(mn) 從右…

conda入門

目錄 1. Conda 是什么&#xff1f;2. 為什么需要 Conda&#xff1f;它能解決什么問題&#xff1f;3. Conda 的核心組件和概念4. Conda 基本工作流程和常用命令5. Conda 的主要優勢6. Conda 與 Pip 的關系7. 何時使用 Conda&#xff1f; 1. Conda 是什么&#xff1f; 包管理器&…

UE 5 和simulink聯合仿真,如果先在UE5這一端結束Play,過一段時間以后**Unreal Engine 5** 中會出現顯存不足錯誤

提問 UE5報錯如圖。解析原因 回答 你遇到的這個錯誤提示是&#xff1a; “Out of video memory trying to allocate a rendering resource. Make sure your video card has the minimum required memory, try lowering the resolution and/or closing other applications tha…

第七十三篇 從電影院售票到停車場計數:生活場景解析Java原子類精髓

目錄 一、原子類基礎&#xff1a;電影院售票系統1.1 傳統售票的并發問題1.2 原子類解決方案 二、原子類家族&#xff1a;超市收銀系統2.1 基礎類型原子類2.2 數組類型原子類 三、CAS機制深度解析&#xff1a;停車場管理系統3.1 CAS工作原理3.2 車位計數器實現 四、高性能實踐&a…

Linux(線程控制)

一 線程的操作 1. 創建線程&#xff1a;pthread_create int pthread_create(pthread_t *thread, // 線程 idconst pthread_attr_t *attr, // 線程屬性設置void *(*start_routine) (void *), // 回調函數void *arg // 傳遞…

PL/SQLDeveloper中數值類型字段查詢后顯示為科學計數法的處理方式

PL/SQLDeveloper中數值類型字段查詢后顯示為科學計數法的處理方式 文章目錄 PL/SQLDeveloper中數值類型字段查詢后顯示為科學計數法的處理方式1. 查詢效果2. 處理方式3. 再次查詢 1. 查詢效果 2. 處理方式 3. 再次查詢

centos 9/ubuntu 一次性的定時關機

方法一 # 15 表示15分鐘以后自動關機 sudo shutdown -h 15方法二&#xff1a; sudo dnf install at -y # 晚上十點半關機 echo "shutdown -h now" | at 22:30 # 檢查是否設置成功命令 atq [rootdemo-192 ~]# atq 1 Wed Jun 4 11:12:00 2025 a root # 取消定時計劃…

Riverpod與GetX的優缺點對比

Riverpod 與 GetX 的優缺點對比 在 Flutter 開發領域,Riverpod 和 GetX 都是備受關注的狀態管理與依賴注入框架,它們各有優劣,適用于不同的開發場景。以下從多個維度詳細對比二者的優缺點。 一、Riverpod 的優缺點 (一)優點 架構清晰,數據流向明確:基于 Provider 模…

day 47

注意力可視化 訓練模型 包含通道注意力模塊和CNN模型的定義&#xff08;通道注意力的插入&#xff09; import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import ma…

《Vuejs設計與實現》第 8 章(掛載與更新)

目錄 8.1 掛載子節點與屬性 8.2 HTML Attributes 與 DOM Properties 8.3 設置元素屬性的正確方式 8.4 處理 class 屬性 8.5 卸載操作 8.6 區分 vnode 類型 8.7 事件處理優化 8.8 事件冒泡與更新時機問題 8.9 子節點的更新 8.10 文本節點和注釋節點 8.11 片段&#xf…

自制操作系統(五、重寫引導部分和C語言的使用)

為了實現其他更多功能&#xff0c;我決定重新寫引導部分的內容 boot.asm ; boot.asm %include "config.inc"setuplen equ 4 bootseg equ 0x07c0 initseg equ def_initseg setupseg equ def_setupseg sysseg equ def_syssegsetupsector equ 2 syssector equ setupse…

口罩佩戴檢測算法AI智能分析網關V4工廠/工業等多場景守護公共衛生安全

一、引言? 在公共衛生安全日益受到重視的當下&#xff0c;口罩佩戴成為預防病毒傳播、保障人員健康的重要措施。為了高效、精準地實現對人員口罩佩戴情況的監測&#xff0c;AI智能分析網關V4口罩檢測方案應運而生。該方案依托先進的人工智能技術與強大的硬件性能&#xff0c;…

【評測】用Flux的圖片文本修改的PS效果

【評測】Flux的圖片文本修改的PS效果 1. 百度圖庫找一張有英文的圖片 2. 打開https://playground.bfl.ai/image/edit上傳圖片 3. 輸入提示詞 “change brarfant to goodbeer” 圖片的文字被修改了