• 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 

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

  • 相关阅读:
    C#图形编程
    深入浅出话事件(上)
    .NET名称空间对应的类集
    Equals() 和运算符 == 的重写准则(C# 编程指南)
    Implement EventArgs
    CLS(公共语言规范)的CLSCompliant(跨语言调用)
    学习MSCOREE.dll是托管程序的入口点
    设计模式之原型模式代码示例
    The disk cannot be added to Cluster Shared Volumes because it does not have any suitable partitions
    RAID小结
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8119003.html
Copyright © 2020-2023  润新知