设计模式之行为型设计模式

y123132 y123132 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

行为型设计模式

解释器模式

java中用的很。JVM编译的时候就是对我们写的代码进行了解释操作;数据库SQL语句亦是如此

解释器:对语言进行解释,根据不同语义来做不同的事情。

举例:双栈计算器

public class 双栈实现计算器 {
    //设置两栈
    private static Deque<Character> opr = new LinkedList<>();
    private static Deque<Double> number = new LinkedList<>();

    public static void main(String[] args) {
        //接收一串字符串并转字符数组
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        char [] arrC = str.toCharArray();

        for (int i = 0; i < arrC.length;) {
            char c = arrC[i];
            //是+-/*字符时
            if (isChar(c)){
                ///如果栈内有字符,则需要判断优先级,入栈字符小于等于栈内字符则需要先计算栈内字符
                Character peek = opr.peek();    //细节!!! 这里必须先取
                while (peek!=null && isLowIn(c,peek)){
                    cal();
                    peek=opr.peek();       //细节!!这里也必须更新peek
                }
                //入栈
                opr.push(c);
                i++;
            }
            //字符是数字时
            else {
                double sum=0;   //接收整数和
                double sum2=0;  //接收小数和
                int times = 1;  //记录当前小数位数
                boolean flag=false; //是否开启小数检测模式

                //判断下一个是不是+-*/,不是的话就继续判断直到非数字
                while (i<=arrC.length-1 && !isChar(arrC[i])){       //细节:括号内两者顺序不能改变
                    //遇到小数的情况
                    if (arrC[i]=='.'){
                        flag=true;
                    }else {
                        //小数情况
                        if (flag){
                            double val=arrC[i]-'0';
                            for (int j = 0; j < times; j++) {   //细节!用times缩小值
                                val/=10.0;
                            }
                            times++;
                            sum2+=val;
                        }
                        //正数情况
                        else {
                            sum=sum*10+arrC[i]-'0';     //获取多位数字的关键!!!
                        }
                    }
                    i++;
                }
                number.push(sum+sum2);
            }
        }
        //字符都获取完了后栈内还有数字和字符的话,就计算完栈内的数据并输出最终结果
        while (!opr.isEmpty()) cal();
        System.out.println(number.peek());
    }

    //判断是否为字符
    public static boolean isChar(char c) {
        return c=='+'||c=='-'||c=='*'||c=='/';
    }

    //判断优先级是否是栈外字符小于等于栈内字符
    public static boolean isLowIn(char out,char in){
        return (out=='+'||out=='-')||(in=='*'||in=='/');
    }

    public static void cal(){
        //从栈内取出两个数组和一个字符
        double a = number.pop();
        double b = number.pop();
        char c = opr.poll();

        //根据字符c进行不同的运算
        switch (c){
            case '+':
                number.push(a+b);
                break;
            case '-':
                number.push(b-a);
                break;
            case '*':
                number.push(b*a);
                break;
            case '/':
                number.push(b/a);
                break;
            default:
                System.out.println("字符输入有误");
        }
    }

}

 

...全文

相关推荐

C#设计模式之行为型模式详解

在C#编程中,设计模式是一种经过验证的解决常见软件设计问题的方法,它们提供了一种标准的方式来处理特定的编程情况。行为型模式是设计模式的一种类型,主要关注对象之间的责任分配和交互。

weixin_38606019

design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip

本压缩包"design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip"提供了全面的设计模式学习资源,适用于初学者和有经验的开发者,帮助他们提升软件设计能力

极致人生-010

软件设计模式作业 行为型设计模式

"软件设计模式作业 行为型设计模式"这篇资源主要涵盖了四个行为型设计模式的实践应用:组合模式、中介者模式、观察者模式和状态模式,并以实际问题为背景进行了详细的设计和实现。1、组合模式:组合模

FGGIT

DesignPattern-85

首先,我们来讨论设计模式的基本分类。设计模式通常分为三类:创建型模式、结构型模式和行为型模式。1.

丰雅

设计模式之行为型模式代码.zip

在软件工程中,设计模式是解决常见编程问题的可重用解决方案。行为型设计模式主要关注对象之间的交互和责任分配,使系统的行为更加灵活、可扩展。以下将详细阐述标题和描述中提到的九种行为型设计模式:1.

小小哭包
评论 1
收藏 已收藏
分享
返回顶部