• 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 

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

  • 相关阅读:
    Java代码生成器多表配置优化,增加自定义实体功能
    Java代码生成器加入postgresql数据库、HikariCP连接池、swagger2支持!
    SSM/SpringBoot代码生成器全面升级—增加全新前后端分离响应式主题,修复若干Bug
    记一次真实的线上事故:一个update引发的惨案!
    昨日学习安排
    C++个人学习笔记
    C++位运算符
    随手写事two
    随手写事
    Tomcat一对多遇到得问题
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8119003.html
Copyright © 2020-2023  润新知