java设计模式----命令模式 weir 2015-05-18 14:55:50.0 java,设计模式 1295 我始终认为:越简单的行为内部蕴含着越复杂的逻辑。 就像爱因斯坦的相对论一样,一个简简单单的公式里面却蕴含着无穷的宇宙奥秘。 我们所讨论的命令模式就是这样的思维,还有我们现在火热的大数据和人工智能技术,用起来非常的简单,可是内部实现确是异常的复杂。 正如哲学所讨论的那样万事万物都有千丝万缕的内在联系,只是我们太过平凡,还没有智慧去解释那些事情,于是宗教就产生了,也许人类灭亡的时候我们还是没有那样的智慧去拯救自己。因为揭开这样复杂的关系需要付出无比巨大的牺牲,最炙热理想,最崇高的使命感而且是一代一代的人类都要有这样的使命感。在我看来智者不可求,完全需要时间和历史的积淀,就像伟人一样,绝非几十年,几个世纪非有也。 当然了我们的命令模式没有那么高深的智慧,但我们也可以要知道一些道理,那就是,你操作的越简单,那么后台处理的就越复杂。 package com.weir.command; public class Receiver { public void action() { System.out.println("do it"); } } package com.weir.command; public interface Command { public void execute(); } package com.weir.command; public class ACommand implements Command{ private Receiver receiver = null; public ACommand(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { receiver.action(); } } package com.weir.command; public class Invoker { private Command command = null; public Invoker(Command command) { this.command = command; } public void action() { command.execute(); } } package com.weir.command; public class Clinet { public static void main(String[] args) { Receiver receiver = new Receiver(); Command command = new ACommand(receiver); Invoker invoker = new Invoker(command); invoker.action(); } } 我们为了执行一个命令,做了这么多工作,看起来有些画蛇添足。 鱼和熊掌真的是很难兼得,在很多事情上都是一样的。我们并不是不想把所有事情都简单化直接化,去除繁琐的调用过程。但有时候可能就是我们的智慧达不到那样的要求,不得不用复杂而笨拙,相对灵活的方式来处理我们的问题。 计算机才发展多少年对不对,路漫漫其修远兮。 所以人类的自卑也油然而生,一生的付出可能没有结果,可能就坚持不了一生就放弃了,谁会不自卑。所以有崇高的理想是多么的难能可贵,理想在当下听起来像是一种讽刺的名词,生存和生活的压力压垮了多少仁人志士,古往今来。 哈哈 回到我们的正题,我们再多加一下命令: package com.weir.command; public class Receiver { // public void action() { // System.out.println("do it"); // } public void a() { System.out.println("do it A"); } public void b() { System.out.println("do it B"); } public void c() { System.out.println("do it C"); } } package com.weir.command; public interface Command { public void execute(); } package com.weir.command; public class ACommand implements Command{ private Receiver receiver = null; public ACommand(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { receiver.a(); } } package com.weir.command; public class BCommand implements Command{ private Receiver receiver = null; public BCommand(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { receiver.b(); } } package com.weir.command; public class CCommand implements Command{ private Receiver receiver = null; public CCommand(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { receiver.c(); } } package com.weir.command; public class Invoker { private Command acommand; private Command bcommand; private Command ccommand; public void setAcommand(Command acommand) { this.acommand = acommand; } public void setBcommand(Command bcommand) { this.bcommand = bcommand; } public void setCcommand(Command ccommand) { this.ccommand = ccommand; } public void a() { acommand.execute(); } public void b() { bcommand.execute(); } public void c() { ccommand.execute(); } } package com.weir.command; public class Clinet { public static void main(String[] args) { Receiver receiver = new Receiver(); Command acommand = new ACommand(receiver); Command bcommand = new BCommand(receiver); Command ccommand = new CCommand(receiver); Invoker invoker = new Invoker(); invoker.setAcommand(acommand); invoker.setBcommand(bcommand); invoker.setCcommand(ccommand); invoker.a(); invoker.b(); invoker.c(); } } 我想看完这两个例子,你对这个设计模式理解的应该可以了。 其实还有一个叫宏命令的概念,我在这里不再说了,重要与否大家自己去理解就好了。