登陆注册
15296300000189

第189章 10 命令模式的功能,好处,或者说

为什么使用命令模式大B:“上边的代码是否看起来很傻呢,本来可以这样简单实现的。”

public class Client{

public static void main(String[]args){

Receiver receiver=new Receiver();

receiver。actionOne();

receiver。actionTwo();

}

}

public class Receiver{

public Receiver(){

//

}

public void actionOne(){

System。out。println(“ActionOne has been taken。”);

}

public void actionTwo(){

System。out。println(“ActionTwo has been taken。”);

}

}

大B:“看!多简洁。如果是像上边如此简单的需求,这个才应该是我们的选择,但是有些情况下这样的写法不能解决的,或者说解决起来不好,所以引入命令模式。1、我们须要Client和Receiver同时开发,而且在开发过程中分别须要不停重构,改名。2、如果我们要求Redo,Undo等功能。3、我们须要命令不按照调用执行,而是按照执行时的情况排序,执行。4、开发后期,我们发现必须要log哪些方法执行了,如何在尽量少更改代码的情况下实现,并且渐少重复代码。5、在上边的情况下,我们的接受者有很多,不止一个。”

小A:“当我们遇到这些情况时应该怎样去解决?”

大B:“解决办法:情况一、我们可以定义一个接口,让Receiver实现这个接口,Client按照接口调用。情况二、我们可以让Receiver记住一些状态,例如执行前的自己的状态,用来undo,但自己记录自己的状态实现起来比较混乱,一般都是一个累记录另一个类的状态。情况三、很难实现。情况四、我们须要在每个Action,前后加上log。”情况五、相对好实现,但是再加上这个,是否感觉最终的实现很混乱呢?

大B:“好,我们再来看看命令模式,在命令模式中,我们增加一些过渡的类,这些类就是上边的命名接口和命令实现,这样就很好的解决了情况一、情况二。我们再加入一个Invoker,这样情况三和情况四就比较好解决了。”

如下加入Log和排序后的。

public class Invoker{

private List cmdList=new ArrayList();

public Invoker(){

}

public add(Command command){

cmdList。add(command);

}

public remove(Command command){

cmdList。remove(command);

}

public void action(){

Command cmd;

while((cmd=getCmd())!=null){

log(“begin” cmd。getName());

cmd。execute();

log(“end” cmd。getName());

}

}

public Command getCmd(){

//按照自定义优先级,排序取出。

}

}

public class Client{

public static void main(String[]args){

Receiver receiver=new Receiver();

Command commandOne=new ConcreteCommandOne(receiver);

Command commandTwo=new ConcreteCommandTwo(receiver);

Invoker invoker=new Invoker();

invoker。add(commandOne);

invoker。add(commandTwo);

iinvoker。action();

}

}

同类推荐
  • 高校校园网管理与网上引导工作研究

    高校校园网管理与网上引导工作研究

    在当今的信息化潮流之下,我们不可否认互联网的出现,绝不仅仅是传送手段的变化,更重要的是它代表着一种新的社会形态——网络社会的来临。互联网已经以一种前所未有的方式渗透到现代社会的各个层面和领域,成为现代社会前进和发展的动力和工具,它推动了社会经济、文化政治实现所谓的“数字化转变”。
  • 计算机与人工智能(科学新知丛书)

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

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

    互联网创业前奏曲(第二部)——网站运营之人性、策略与实战

    本书是《互联网创业前奏曲》系列的第二本书,是作者多年互联网实践经验和业界观察的总结,是国内罕有的关于互联网网站运营和用户心理结合的书籍,用通俗的语言阐述互联网运营背后的人性驱动。你想互联网创业吗?你是否在为找不到好的互联网运营策略和方法而发愁?你非常想了解互联网行业?你是否在为自己不了解互联网运营而苦恼?本书针对这些问题列举了很多互联网运营的案例,帮你制定运营策略,更好的修炼和提升运营功力。
  • 公开时刻

    公开时刻

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

    一本书读懂大数据

    本书是深入研究互联网思维的经典之作,从互联网思维的定义到互联网思维应用的具体案例表现。作者深入浅出、条分缕析,全面阐述互联网思维的内核与精神,逐一点评当前关于互联网思维的各种观点。本书从最初级的互联网思维应用到高端的粉丝经济,平台建设,自媒体营销的方法都有详细讲解介绍。让读者了解什么是互联网思维的同时还能学会把互联网思维运用到自己的工作学习已经生活中。
热门推荐
  • 香玉满怀

    香玉满怀

    当秦羽带着那枚藏有药池的戒指,从深山中回到城市的时候,他突然发现,一切都不再一样了。不一样的医术,不一样的人生,不一样的美女环绕,这只是一个年轻人的奋斗史。
  • 七彩面包树

    七彩面包树

    神奇的星球仪系列:爱铮铮从老爷爷那里得到了一个神奇的星球仪——水果星球仪,只要念动咒语就能让星球仪变大变小,通过触摸上面的标志还能穿到那个世界中去,可爱的西瓜人,早晚性格不一的小仙女,聪明的菠萝人,善良胆小的香蕉人……快来看看铮铮和他的小伙伴们在这些奇怪的水果岛上都有什么样的经历……!唐小鸭系列:讲述唐小鸭搞笑又轻松的故事,还有各种迷你小故事都是小鱼原创的,喜欢就收藏吧!多多支持小鱼哦……
  • 战神联盟之蝴蝶印

    战神联盟之蝴蝶印

    文武双全,能装萌会撒娇,史上第一最美大小姐来宇宙了!和战神联盟一起——打海盗,踹邪灵走南闯北多嗨皮~殊不知,美丽外表下,藏着这多大的惊天地泣鬼神的大阴谋~
  • 年少轻狂,是我们最大的过错

    年少轻狂,是我们最大的过错

    曾经美好得不像话的青梅竹马,却始终敌不过人心易改。执孤一笑,泪抉择。顾以初,你……会怎么选择……
  • 刀候之子

    刀候之子

    生活在传奇已经远逝的年代,是否就会平庸而安全的活下去。逝去的秘密真的会永远隐藏于尘埃之下吗?一个普通的少年为何成为重新开启传奇时代的钥匙。他会成为传奇还是烂漫的一场烟花。
  • 晨曦晚阳之暮光微明

    晨曦晚阳之暮光微明

    亡国公主沐晨曦,国已破,家已亡,本以为没什么可留恋的了,却未曾想,一朝穿越,竞成了刁蛮任性的安府大小姐,入宫复仇,灵魂归位,再加上她的身世,沐晨曦身上到底有什么秘密呢……
  • 极简人际关系心理学

    极简人际关系心理学

    人际关系心理学是纠正人性弱点和培养人性优点的学科,认识到人性的优缺点后,我们就可以在心理上占据上风,就可以随时把握对方的心理活动,从而为建立良好的人际关系奠定基础。无论是扩展人际关系还是维护人际关系,心理活动均参与其中。它既包括自我的心理活动也包括对方的心理活动,任何时候都不要情绪化,别让不良情绪主宰自己,然后做对事说对话。这样的话,我们在处理人际关系时,就变得轻松自然了。
  • 龙傲武尊

    龙傲武尊

    灵魂分裂,龙魂衍生,蛟龙之变,真龙化神。平凡少年因陷害而崛起,因机缘而逆天,武道一途磨难坎坷无数,但凭借变异龙魂,少年将掌控乾坤,颠覆阴阳,成就武尊。强者陨落,必然有新秀崛起,这是命,却也是阴谋的开始。能否打破阴谋,勘破真相,且看少年如何逆天改命。
  • 半世繁华夜未央

    半世繁华夜未央

    他本薄凉,奈何巧笑兮倩出现在他面前,他本无情,却偏偏被她那一抹灿烂的笑给乱了心。一桥轻雨一伞开,半城柳色半声笛……
  • 一年微然

    一年微然

    七年,一轮回。再见面的时候,我们已经褪去青涩,坦然再说好久不见