这样,我们就可以使用了,方式如下:
public class TestUse { public static void main(String args[]) throws Exception{ //接收者 MakeFile makeFile = new MakeFile(); //命令 CommandCreate create = new CommandCreate(makeFile); CommandDelete delete = new CommandDelete(makeFile); //请求者 Client client = new Client(); //执行命令 client.setCommand(create).executeCommand("d://test1.txt"); client.setCommand(create).executeCommand("d://test2.txt"); client.setCommand(delete).executeCommand("d://test2.txt"); }}//执行完后在D盘会有一个test1.txt的文件,test2.txt本页创建了,不过又被删除了。。
这里只是简单的实现,诸如CommandCreate命令的操作,如果我们需要undo的,那么就需要在命令接口中添加undo()方法并在具体命令中实现即可(将操作保存到栈里即可,undo的时候出栈并撤销操作)。
命令模式不宜滥用,比如:使用这种模式,会多出来很多对象(命令)。
命令模式中还有一种具体命令叫宏命令,它会包含一些其他具体命令的引用,执行宏命令可以执行这个宏命令所包含的引用的命令,概念清楚后实现起来也是容易的:
比如输出文章的命令,有中文输出命令、英文输出命令和宏命令,宏命令包含了其他两个命令的引用(可以使用列表保存这些命令),如果执行宏命令,宏命令会一次执行它所包含引用的其他命令(迭代命令列表并执行即可)。
8、解释器模式(Interpreter Patterm)
Given a language,define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
何时使用
当有一个简单的语言需要解释执行,并且可以将该语言的每一个规则表示为一个类时,就可以使用解释器模式。
优点
将每一个语法规则表示成一个类,方便与实现简单的语言。 由于使用类表示语法的规则,可以较容易改变或扩展语言的行为。 通过在类结构中加入新的方法,可以在解释的同时增加新的行为。
概念其实很简单。在有些问题上,我们可能希望自定定义简单的语言来描述,然后我们自己能解释它。
解释器模式一般包括四种角色:
抽象表达式:该角色为一个接口,负责定义抽象的解释操作。 终结符表达式:实现抽象表达式接口的类。 非终结表达式:也是实现抽象表达式的类。 上下文(Context):包含解释器之外的一些全局信息。
使用该模式设计程序一般需要三个步骤:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-33893-15.html
棒
是哦