登陆注册
15296300000199

第199章 8 加减乘除

大B:“来举一个加减乘除的例子吧,实现思路来自于《java与模式》中的例子。每个角色的功能按照上面提到的规范来实现。”

//上下文(环境)角色,使用HashMap来存储变量对应的数值

class Context

{

private Map valueMap=new HashMap();

public void addValue(Variable x,int y)

{

Integer yi=new Integer(y);

valueMap。put(x,yi);

}

public int LookupValue(Variable x)

{

int i=((Integer)valueMap。get(x))。intValue();

return i;

}

}

//抽象表达式角色,也可以用接口来实现

abstract class EXPression

{

public abstract int interpret(Context con);

}

//终结符表达式角色

class Constant extends Expression

{

private int i;

public Constant(int i)

{

this。i=i;

}

public int interpret(Context con)

{

return i;

}

}

class Variable extends Expression

{

public int interpret(Context con)

{

//this为调用interpret方法的Variable对象

return con。LookupValue(this);

}

}

//非终结符表达式角色

class Add extends Expression

{

private Expression left,right;

public Add(Expression left,Expression right)

{

this。left=left;

this。right=right;

}

public int interpret(Context con)

{

return left。interpret(con) right。interpret(con);

}

}

class SuBTract extends Expression

{

private Expression left,right;

public Subtract(Expression left,Expression right)

{

this。left=left;

this。right=right;

}

public int interpret(Context con)

{

return left。interpret(con)-right。interpret(con);

}

}

class Multiply extends Expression

{

private Expression left,right;

public Multiply(Expression left,Expression right)

{

this。left=left;

this。right=right;

}

public int interpret(Context con)

{

return left。interpret(con)*right。interpret(con);

}

}

class Division extends Expression

{

private Expression left,right;

public Division(Expression left,Expression right)

{

this。left=left;

this。right=right;

}

public int interpret(Context con)

{

try{

return left。interpret(con)/right。interpret(con);

}catch(ArithmeticException ae)

{

System。out。println(“被除数为0!”);

return-11111;

}

}

}

//测试程序,计算(a*b)/(a-b 2)

public class Test

{

private static Expression ex;

private static Context con;

public static void main(String[]args)

{

con=new Context();

//设置变量、常量

Variable a=new Variable();

Variable b=new Variable();

Constant c=new Constant(2);

//为变量赋值

con。addValue(a,5);

con。addValue(b,7);

//运算,对句子的结构由我们自己来分析,构造

ex=new Division(new Multiply(a,b),new Add(new Subtract(a,b),c));

System。out。println(运算结果为: ex。interpret(con));

}

}

大B:“解释器模式并没有说明如何创建一个抽象语法树,因此它的实现可以多种多样,在上面我们是直接在Test中提供的,当然还有更好、更专业的实现方式。对于终结符,建议采用享元模式来共享它们的拷贝,因为它们要多次重复出现。但是考虑到享元模式的使用局限性,建议还是当你的系统中终结符重复的足够多的时候再考虑享元模式。”

同类推荐
  • 如何选购电脑

    如何选购电脑

    本书以问答的形式介绍了选购电脑的基本知识。内容包括:电脑的组成、选购电脑的技巧、主机的部件构成、主板的主要类型、CPU的性能指标等。
  • 公开时刻

    公开时刻

    本书从传播者分析,内容分析,媒介分析受众与效果分析,传播环境与传播控制分析等几大方面把汶川地震作为重大传播案例,阐释汶川地震的传播学遗产。对政府部门和新闻媒体在危机公关方面做出正面评价。
  • 计算机与人工智能(科学新知丛书)

    计算机与人工智能(科学新知丛书)

    本书是专门为中小学生编写的科普读物。全书共分八个部分,分别就计算机诞生的历程,计算机的种类、构造、作用及其发展趋势等方面进行了详尽的论述,全书论述深入浅出,行文活泼流畅。为本书的主要读者——广大的中小学生朋友认识计算机、了解计算机和掌握计算机提供了一把钥匙,是新时期中小学生开展素质教育不可多得的科普读物,中小学生家长及教师阅读此书也能从中获得有益的启示和感悟。
  • 成为淘宝创业的超级毕业生

    成为淘宝创业的超级毕业生

    本书讲述如何通过淘宝创业将大学在校生打造成为“超级毕业生”。主要内容包括大学生从事淘宝创业的理论基础、学以致用的操作指南,以及可资借鉴的案例。书中的理念篇可供对创业教育感兴趣的高校教师参考;实战篇提出的“淘宝十二招”,操作简单,易学易用;案例篇讲述了十位成功在校创业大学生的故事,主要供学生参考。读完本书,相信凡是关注大学教育者或希望通过淘宝创业的大学生,皆能从中获得启发,对创业从无心变有心,从有心变行动,亲身投入或参与到这个伟大的事业中来。
  • 三维动画审美谈

    三维动画审美谈

    数字时代,美的标准充满更多的不确定性。而三维动画以数字图像形式成为这个图时代的代表。三维动画及三维图像不仅仅是由于应用了仿真数字图像技术而带来的虚拟空间,还有更多的是由三维图像技术所引发或引导的被扩展的图像技术,这些技术无不应用在现代视觉设计领域的各个方面,并且,由此引起社会的追热,引起审美观念的改变。这些改变是在进行中的,变化中的,也是在发展中的。对于未知的美,我们做的只是追寻和记录,我们不知道以后的美将会是什么样,尽管我们苦苦追寻,孜孜探讨,同时也在默默审视。我们在追寻中享受美,在探讨中认知美,在审视中体验美……
热门推荐
  • 珍宝

    珍宝

    因为这颗宝玉,贾珍宝得以从灾厄神附身的厄运中暂时逃脱,也是因为它,将她接二连三地卷入诸多神秘事件中。命运的轮回下,她不由自主地靠近未知的真相。那个蔷薇花海邂逅的少年,那个虚空中冷寂的神祗,珍宝在前,你将如何选择……
  • 天下皆狂:蛊毒妖妃

    天下皆狂:蛊毒妖妃

    一朝穿越,一代蛊师杀手变成了冷宫丑妃,爹不疼娘不爱,每个月还得乖乖献血割脉,孤苦伶仃,还有比她更倒霉的吗?傲娇宠物天天粘着,好吧,那她养着了。一朝春尽,她的孩子,她的宠物一伤一亡,她要复仇!等着,那个风华绝代的杀手又回来了!收服极品蛊毒蜘蛛,降服傲娇腹黑帝王,顶着绝世丑容夺得帝王宠。后宫那是她的地方,谁敢染指?
  • 极品神医:纨绔大小姐

    极品神医:纨绔大小姐

    她,是二十三世纪叱咤风云的神医,却没想因为一次意外穿越到了冷府人人喊打的纨绔大小姐身上,修灵力,契神兽,且看她如何一步步走向巅峰强者。
  • 公主病之冒牌王子真爱情

    公主病之冒牌王子真爱情

    “上官晨曦,你,你不要脸”男孩儿满脸通红,不知道是气的还是累的,上气不接下气地责怪女孩:“你一个女,女孩子,干嘛非要扒我裤子!”“我不是说了吗,只要你让我看一下你屁股上有没有胎记就行了!”女孩对男孩的不配合有些恼怒,立刻加快了速度离男孩的距离更近了。
  • 花间坊

    花间坊

    在一个夜深人静的晚上,一个不起眼的花店将牌子翻到了另一面————本店除了提供舒适的月亮级酒店环境外,还办理以下业务:穿越古代,异世,次元空间。代理:引路、轮回、阴媒、捉鬼。前世姻缘,今生孽债等复杂问题一次性收取费用。通用货币,包括金子银子玉石,拒绝银票纸币游戏币。单向穿越一步到位,双向穿越请提前付费。一般穿越价格优廉,不保证角色身家安全。会员穿越可办理套餐,可按照等级提供金手指外挂菜单。消费达到xxxx会员等级,免费附赠事业,美男。本书言情为主,异能为辅,搞笑为作料,小伤感只为作者自己偷偷笑~
  • 天弦幻绝

    天弦幻绝

    天空,已经开始了永恒的黑暗。诡异的天赐、悬疑的仇恨...爱与恨的缠绵,笑与泪的交织...这一切究竟是上天的安排,还是自己的命运。且看看少年如何在尸横遍野的大道上走到巅峰!
  • 国王的人马海顿斯坦诗选(诺贝尔文学奖文集)

    国王的人马海顿斯坦诗选(诺贝尔文学奖文集)

    诺贝尔文学奖,以其人类理想主义的伟大精神,为世界文学提供了永恒的标准。其中所包含的诗、小说、散文、戏剧、哲学、史学等不同体裁。不同风格的杰作,流光溢彩,各具特色,全面展现了20世纪世界文学的总体各局。吉卜林、梅特林克、泰戈尔、法朗士、消伯纳、叶芝、纪德……一个个激动人心的名字;《尼尔斯骑鹅旅行记》、《青鸟》、《吉檀迦利》、《福尔赛世家》、《六个寻找作者的剧中人》、《伪币制造者》、《巴比特》……
  • 全系废才

    全系废才

    洛兰本是一个乞丐,但却凭着这个身份,进入了神圣大陆仅有的五座魔法学院之一的安诺斯魔法学院,开始了自己的魔法之旅。
  • 雷霆烈

    雷霆烈

    天才与天才之间的重逢,对手于对手之间的摩擦,一步一步逼近的危机,他们是否会赢得最终的胜利
  • 豪门巨星:老婆V5!

    豪门巨星:老婆V5!

    初见,她打得他抱头鼠窜!再见,她蒙得他心怀愧疚!长相处,她财迷腹黑又强悍,他软萌可怜似小白兔!人前,他是万人迷演视歌三栖巨星!人后,他是二货吃货打滚卖萌赔款割地只为吃吃吃!最开始是吃菜吃饭吃饺子,后来想吃的是她是她还是她……