命令模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5、迪米特法则(最少知道原则)
一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则
7
原则是尽量使用合成/聚合的方式,而不是使用继承。
1.6 高内聚-低耦合原则
如果类中的方法是一组相关的行为,则
称该类是高内聚的,反之称为低内聚的。
所谓低耦合就是尽量不要让一个类含有
15
模式的结构的描述与使用 4.请求者(Invoker) ArmySuperior.java public class ArmySuperior{ Command command; //用来存放具体命令的引用 public void setCommand(Command command){ this.command=command; } public void startExecuteCommand(){
}
13
模式的结构的描述与使用
2.命令(Command)接口 : Command.java
public interface Command { public void execute(); }
14
模式的结构的描述与使用
3.具体命令(ConcreteCommand) ConcreteCommand.java
Java设计模式
1
第一章 设计模式简介
1.1 什么是设计模式
每一个设计模式描述一个在我们周围不 断重复发生的问题,以及该问题的解决 方案的核心。这样,你就能一次一次地
使用该方案而不必做重复劳动。
2
1.2 学习设计模式的重要性
学习设计模式不仅可以使我们使用好这些
成功的模式,更重要的是可以使我们更加深 刻地理解面向对象的设计思想,非常有利于 我们更好地使用面向对象语言解决设计中的 问题。
太多的其它类的实例的引用,以避免修改
系统的其中一部分会影响到其它部分。
8
第二章
命令模式
命令模式(别名:动作,事务) 将一个请求封装为一个对象,从而使你可用不同的请 求对客户进行参数化;对请求排队或记录请求日志,以 及支持可撤消的操作。
9
一 、 概述
在许多设计中,经常涉及到一个对象请求另一个对 象调用其方法到达某种目的。如果请求者不希望或无 法直接和被请求者打交道,即不希望或无法含有被请 求者的引用,那么就可以使用命令模式。 命令模式很好理解,举个例子,司令员下令让士 兵去干件事情,从整个事情的角度来考虑,司令员的 作用是,发出口令,口令经过传递,传到了士兵耳朵 里,士兵去执行。这个过程好在,三者相互解耦,任 何一方都不用去依赖其他人,只需要做好自己的事儿 就行,司令员要的是结果,不会去关注到底士兵是怎 么实现的。
//让具体命令执行execute()方法
command.execute(); } }
16
模式的结构的描述与使用 5.应用 Application.java public class Application{ public static void main(String args[]){ CompanyArmy 三连=new CompanyArmy(); Command command=new ConcreteCommand(三连); ArmySuperior 指挥官=new ArmySuperior(); 指挥官.setCommand(command); 指挥官.startExecuteCommand(); } }
10
二、命令模式的结构与使用
模式的结构中包括四种角色: • • • • 接收者(Receiver) 命令(Command)接口 具体命令(ConcreteCommand) 请求者(Invoker)
11
模式的UML类图
12
模式的结构的描述与使用
1.接收者(Receiver) : CompanyArmy.java public class CompanyArmy{ public void sneakAttack(){ System.out.println("我们知道如何偷袭敌人,保证完成任务"); }
3
ቤተ መጻሕፍቲ ባይዱ
1.3 学习设计模式的重要性
学习设计模式不仅可以使我们使用好这些
成功的模式,更重要的是可以使我们更加深 刻地理解面向对象的设计思想,非常有利于 我们更好地使用面向对象语言解决设计中的 问题。
4
1.4 设计模式的分类
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、 单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理 模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观 察者模式、迭代子模式、责任链模式、命令模式、备忘 录模式、状态模式、访问者模式、中介者模式、解释器 模式。 其实还有两类:并发型模式和线程池模式。
5
1.4 设计模式的分类
6
1.5 设计模式的六大原则
1、开闭原则
开闭原则就是说对扩展开放,对修改关闭。
2、里氏代换原则
里氏代换原则面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生 类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是 抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
public class ConcreteCommand implements Command{ CompanyArmy army; //含有接收者的引用 ConcreteCommand(CompanyArmy army){ this.army=army; } public void execute(){ //封装着指挥官的请求 army.sneakAttack(); //偷袭敌人 } }
17
三、命令模式的优点
• 在命令模式中,请求者(Invoker)不直接与接收者(Receiver)交互,即
请求者(Invoker)不包含接收者(Receiver)的引用,因此彻底消除了彼此 之间的耦合。
• 命令模式满足“开-闭原则”。如果增加新的具体命令和该命令的接受者,
不必修改调用者的代码,调用者就可以使用新的命令对象;反之,如果增加 新的调用者,不必修改现有的具体命令和接受者,新增加的调用者就可以使 用已有的具体命令。
• 由于请求者的请求被封装到了具体命令中,那么就可以将具体命令保存到
持久化的媒介中,在需要的时候,重新执行这个具体命令。因此,使用命令 模式可以记录日志。
• 使用命令模式可以对请求者的“请求”进行排队。每个请求都各自对应一
个具体命令,因此可以按一定顺序执行这些具体命令。
18
3、依赖倒转原则
这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们 看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现: 降低依赖,降低耦合。
相关文档
最新文档