欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java描述設(shè)計(jì)模式(14):解釋器模式-創(chuàng)新互聯(lián)

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

成都創(chuàng)新互聯(lián)公司專注于思茅企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站開發(fā)。思茅網(wǎng)站建設(shè)公司,為思茅等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

一、解釋器模式

1、基礎(chǔ)概念

解釋器模式是對(duì)象的行為模式。給定一個(gè)語言之后,解釋器模式可以定義出其文法的一種表示,并同時(shí)提供一個(gè)解釋器。客戶端可以使用這個(gè)解釋器來解釋這個(gè)語言中的表達(dá)式。

2、模式圖解

Java描述設(shè)計(jì)模式(14):解釋器模式

3、核心角色

(1)、抽象表達(dá)式

Express:聲明具體表達(dá)式角色需要實(shí)現(xiàn)的抽象接口,該接口主要提供一個(gè)interpret()方法,稱做解釋操作。

(2)、終結(jié)符表達(dá)式

TerminalExpress:實(shí)現(xiàn)抽象表達(dá)式角色接口,主要是一個(gè)interpret()方法;每個(gè)終結(jié)符都有一個(gè)具體終結(jié)表達(dá)式與之相對(duì)應(yīng)。比如解析c=a+b,a和b是終結(jié)符,解析a和b的解釋器就是終結(jié)符表達(dá)式。

(3)、非終結(jié)符表達(dá)式

NotTerminalExpress:每一條規(guī)則都需要一個(gè)具體的非終結(jié)符表達(dá)式用來銜接,一般是指運(yùn)算符或者邏輯判斷,比如c=a+b,“+"就是非終結(jié)符,解析“+”的解釋器就是一個(gè)非終結(jié)符表達(dá)式。

(4)、環(huán)境容器

DataMap:一般是用來存放各個(gè)終結(jié)符所對(duì)應(yīng)的具體值,比如c=a+b轉(zhuǎn)換為c=1+2。這些信息需要一個(gè)存放環(huán)境。

4、源代碼實(shí)現(xiàn)

  • 類圖結(jié)構(gòu)

Java描述設(shè)計(jì)模式(14):解釋器模式

  • 源碼實(shí)現(xiàn)
    public class C01_InScene {
    public static void main(String[] args) {
        DataMap dataMap = new DataMap();
        TerminalExpress terminalExpress1 = new TerminalExpress("num1");
        TerminalExpress terminalExpress2 = new TerminalExpress("num2");
        TerminalExpress terminalExpress3 = new TerminalExpress("num3");
        dataMap.putData(terminalExpress1, 1);
        dataMap.putData(terminalExpress2, 2);
        dataMap.putData(terminalExpress3, 3);
        // 1+2-3 = 0
        System.out.println(new Minus(
                           new Add(terminalExpress1,terminalExpress2), terminalExpress3)
                           .interpret(dataMap));
    }
    }
    // 解釋器接口
    interface Express {
    Integer interpret(DataMap dataMap) ;
    }
    // 非終結(jié)符表達(dá)式
    abstract class NotTerminalExpress implements Express {
    Express express1,express2;
    public NotTerminalExpress(Express express1, Express express2){
        this.express1 = express1;
        this.express2 = express2;
    }
    }
    // 終結(jié)符表達(dá)式: 1+2 終結(jié)符: 1 和 2
    class TerminalExpress implements Express {
    public String field ;
    public TerminalExpress (String field){
        this.field = field ;
    }
    @Override
    public Integer interpret(DataMap dataMap) {
        return dataMap.getData(this);
    }
    }
    // 加法表達(dá)式
    class Add extends NotTerminalExpress {
    public Add (Express e1, Express e2) {
        super(e1, e2);
    }
    // 將兩個(gè)表達(dá)式相減
    @Override
    public Integer interpret(DataMap context) {
        return this.express1.interpret(context) + this.express2.interpret(context);
    }
    }
    // 減法表達(dá)式
    class Minus extends NotTerminalExpress {
    public Minus (Express e1, Express e2) {
        super(e1, e2);
    }
    // 將兩個(gè)表達(dá)式相減
    @Override
    public Integer interpret(DataMap context) {
        return this.express1.interpret(context) - this.express2.interpret(context);
    }
    }
    // 數(shù)據(jù)容器
    class DataMap {
    private Map<Express,Integer> dataMap = new HashMap<>() ;
    public void putData (Express key,Integer value){
        dataMap.put(key,value) ;
    }
    public Integer getData (Express key){
        return dataMap.get(key) ;
    }
    }

二、Spring框架應(yīng)用

1、源碼案例

import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class SpringTest {
    public static void main(String[] args) {
        SpelExpressionParser parser = new SpelExpressionParser () ;
        Expression expression = parser.parseExpression("(1+3-2)*3") ;
        Integer result = (Integer)expression.getValue() ;
        System.out.println("result="+result);
    }
}

2、代碼分析

(1)Expression結(jié)構(gòu)

表達(dá)式接口:具有不同的實(shí)現(xiàn)類。

interface Expression
class CompositeStringExpression implements Expression
class LiteralExpression implements Expression
class SpelExpression implements Expression

核心方法:

Object getValue() throws EvaluationException;

(2)SpelExpressionParser結(jié)構(gòu)

SpelExpressionParser extends TemplateAwareExpressionParser
TemplateAwareExpressionParser implements ExpressionParser
interface ExpressionParser

(3)ExpressionParser接口

public interface ExpressionParser {
    Expression parseExpression(String var1) ;
    Expression parseExpression(String var1, ParserContext var2) ;
}

(4)Expression獲取

根據(jù)不同的條件獲取不同的Expression對(duì)象。這里產(chǎn)生類的依賴關(guān)系。

源碼位置:TemplateAwareExpressionParser

public Expression parseExpression(String expressionString, 
                                  ParserContext context) 
                                  throws ParseException {
        if (context == null) {
            context = NON_TEMPLATE_PARSER_CONTEXT;
        }
        return context.isTemplate() ? 
        this.parseTemplate(expressionString, context) : 
        this.doParseExpression(expressionString, context);
    }

三、模式總結(jié)

  • 場(chǎng)景

編譯器、運(yùn)算符表達(dá)式、正則表達(dá)式、機(jī)器人等。

  • 優(yōu)點(diǎn)

當(dāng)有一個(gè)表達(dá)式或者語言需要解釋執(zhí)行,該場(chǎng)景下的內(nèi)容可以考慮使用解釋器模式,使程序具有良好的擴(kuò)展性。

  • 缺點(diǎn)

解釋器模式會(huì)引起類膨脹,會(huì)導(dǎo)致程序執(zhí)行和調(diào)試非常復(fù)雜,不容易理解。

四、源代碼地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

Java描述設(shè)計(jì)模式(14):解釋器模式

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱:Java描述設(shè)計(jì)模式(14):解釋器模式-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://aaarwkj.com/article28/jsejp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、網(wǎng)站收錄、虛擬主機(jī)、動(dòng)態(tài)網(wǎng)站、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
日韩三级视频一区二区| 农村精品少妇久久久久久| 涩五月婷婷开心中文字幕| 日韩中文字幕亚洲精品一| 国产91精品系列在线观看| 国产日韩亚洲欧美色片| 日韩精品中文字幕欧美乱| 国产精品一区日韩专区| 国产精品自拍午夜福利| 国产精品一区欧美精品| 国产精品一区二区久久| 欧美在线观看黄片视频| 日本大型午夜福利视频| 亚洲av乱码久久精品蜜桃| 国产精品久久电影观看| 国产日韩欧美一区二区丝袜| 国内极品尤物视频在线| 极品少妇高潮在线观看免费| 精品国产综合一区二区三区| 人妻有码系列中文字幕专区| 国产在线精品成人欧美| 婷婷网色偷偷亚洲男人| 偷拍色图一区二区二区| 亚洲精品av在线网站| 免费在线观看av日韩| 日韩人妻熟妇中文字幕| 中文字幕乱码亚洲2019| 少妇的诱惑免费在线播放| 黑人巨大欧美一区二区| 国产剧情av在线资源| 哈昂~不要啊在线观看| 亚洲成在人天堂一区二区| 国产精品一区二区麻豆本子 | 国产日韩熟女中文字幕| 国内精品免费视频不卡| 免费观看黄片视频在线观看| 天天操天天射夜夜爽| 伦理在线视频免费观看视频| 91中文字幕国产日韩| 成人爱爱免费观看视频| 国产乱人伦真实精品视频|