zoukankan      html  css  js  c++  java
  • java 之 解释器模式(大话设计模式)

    在软件的世界里存在着翻译机,只不过在软件中我们称之为解释器。在系统中如果某一特定类型的问题在频繁的发生,此时我们就有必要将这些问题的实例表述为一个语言中句子,

    因此可以构建一个解释器,然后利用该解释器来解释这些句子来解决这些问题。选择器模式

    先看下类图。

    大话设计模式类图

    再看下笔者的例子。

    /**
     * 内容
     */
    public class Context {
    
        private String text;
    
        public Context(String text) {
            super();
            this.text = text;
        }
    
        public String getText() {
            return text;
        }
    
        public void setText(String text) {
            this.text = text;
        }
    }
    /**
     * 抽象父类
     */
    public abstract class AbstractExpression {
    
        public void Interpret(Context context) {
            if (null != context.getText() && context.getText().length() > 0) {
                String keyValue = context.getText().substring(0, 2);
                String key = keyValue.substring(0, 1);
                String value = keyValue.substring(1, 2);
                excute(key, value);
                if (context.getText().length() > 2) {
                    context.setText(context.getText().substring(3));
                } else {
                    context.setText("");
                }
            }
        }
    
        public abstract void excute(String key, String value);
    }
    /**
     * 大写字母转义
     */
    public class CharacterExpression extends AbstractExpression{
    
        @Override
        public void excute(String key, String value) {
            System.out.print(key.getBytes()[0] + Integer.parseInt(value) + " ");
        }
    }
    /**
     * 小写字母转义
     */
    public class SmallExpression extends AbstractExpression {
    
        @Override
        public void excute(String key, String value) {
            int tar = key.getBytes()[0] + Integer.parseInt(value);
            System.out.print((char)tar + " ");
        }
    }
    /**
     * 客户端
     */
    public class Text {
    
        public static void main(String[] args) {
            Context context = new Context("A1 B2 C3 D4 a1 b1 c1 d2");
            AbstractExpression expression = null;
            while(context.getText().length() > 0) {
                String first = context.getText().substring(0, 1);
                if (Character.isLowerCase(first.charAt(0))) {
                    expression = new SmallExpression();
                } else {
                    expression = new CharacterExpression();
                }
                expression.Interpret(context);
            }
        }
    }

    运行结果如下

    66 68 70 72 b c d f 

    这是笔者对解释器模式的理解,希望能够帮助学习解释器模式的小伙伴。

  • 相关阅读:
    自测项目:批量删除云盘重复文件
    表格更新成本 二 问用户年龄和口令,直到他们提供有效的输入
    知乎抓取、写入文档
    倒打印心
    HDU 1102 Constructing Roads
    C++模板:字典树
    HDU 3015 Disharmony Trees
    HDU 2227 Find the nondecreasing subsequences
    HDU 3486 Interviewe
    C++模板:ST算法
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8119003.html
Copyright © 2011-2022 走看看