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 

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

  • 相关阅读:
    Swift代码实现加载WEBVIEW
    android 图片压缩
    Android图片压缩(质量压缩和尺寸压缩)
    Android压缩图片到100K以下并保持不失真的高效方法
    android图片压缩的3种方法实例
    几种颜色模型的转换公式
    RGB HSV HLS三种色彩模式转换(C语言实现)
    由RGB到HSV颜色空间的理解
    BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
    插入排序算法
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8119003.html
Copyright © 2011-2022 走看看