软件体系结构命令模式与策略模式课堂讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
策略模式的结构
客户context拥有成员变量strategy(策略),至于需要 用到那种策略,可以在构造器中指定
算法体现了几个设计原则: 第一、把变化的代码从不变的代码 中分离出来; 第二、针对接口编程而不是具体类 (定义了策略接口); 第三、多用组合,少用继承(客户 通过组合方式使用策略)。
策略模式实例分析-以公司各职能部门为例
定义的策略接口,就是工作内容 interface DoWorking {
public void comeOn(); }
编码类实现策略接口DoWorking
this.tv = tv; }
public void execute() { //执行请求 tv.on(); } public void undo() { //撤销请求 tv.off(); }
命令模式的适用场景和总结
(1)、当需要一个对象执行某个动作,但并不知道或者无须知道接收者是什么对象时使用。 (2)、当需要连续或者同时控制多个对象执行动作时,可以运用命令模式把每个动作封装成一个命令, 组成命令队列。只要操纵该队列的命令就可以控制多个对象执行相关动作。 (3)、当需要考虑系统恢复时,可以使用命令日志。
System.out.println("灯关闭了"); } }
命令模式实例
package command.pattern; //没有任何命令,用于初始化每个按键,当调用空命 令时,对象什么事情都不做, //有些时候这也是一种设计模式,因为它为我们省去 判空的操作 public class NoCommand implements Command{
1、”请求发起者”和“请求执行者”之间的解耦是通过命令对象实现的,命令对象起到了纽带桥 梁的作用。
2、空命令也可以说是一种设计模式,它为我们省去了判空的操作。
策略模式
经典的命令模式中的角色:
Command:定义命令的统一接口 ConcreteCommand:Command接口的实现者,用来执行具体的命令,某些情况下可以直 接用来充当Receiver。 Receiver:命令的实际执行者 Invoker:命令的请求者,是命令模式中最重要的角色。这个角色用来对各个命令进行控制。 Client:客户端,创建具体命令对象,并设置命令对象的接收者。
public void execute() {
} public void undo() { } }
package command.pattern;//打开电视命令 public class TVOnCommand implements Command{
TVObj tv; public TVOnCommand(TVObj tv){
COMMAND—两个没法见面的同学,借助于第三个同学实现两人之间的信息传递, 甲对乙有什么指示,就写一张纸条让丙带给乙。丙传送过来一个COMMAND,为了感谢 他,乙请他吃了碗杂酱面,哪知道他说:“我同时给三个同学送COMMAND,就数你最小 气,才请我吃面。
命令模式
经典的命令模式中的角色:
Command:定义命令的统一接口 ConcreteCommand:Command接口的实现者,用来执行具体的命令,某些情况下可以直 接用来充当Receiver。 Receiver:命令的实际执行者 Invoker:命令的请求者,是命令模式中最重要的角色。这个角色用来对各个命令进行控制。 Client:客户端,创建具体命令对象,并设置命令对象的接收者。
策略模式
策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中, 从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提 供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。
STRATEGY:跟不同类型的人相处,要用不同的策略,有的人认为去看电影比较好,有 的则去吃饭,有的觉得游玩Βιβλιοθήκη Baidu合适,但目的都是为了增进友谊。应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
策略模式
if(type == 1){ //微信支付
命令模式
命令模式实例--以家用电器的控制为例
第一步,创建电灯和电视对象,就是接收者
package command.pattern; //灯对象 public class LightObj {
public void on(){ System.out.println("灯打开了");
} public void off(){
策略模式
经典的命令模式中的角色:
Command:定义命令的统一接口 ConcreteCommand:Command接口的实现者,用来执行具体的命令,某些情况下可以直 接用来充当Receiver。 Receiver:命令的实际执行者 Invoker:命令的请求者,是命令模式中最重要的角色。这个角色用来对各个命令进行控制。 Client:客户端,创建具体命令对象,并设置命令对象的接收者。
}else if(type == 2){ // 支付宝支付
}else if(type == 3){ //现金支付
}
使用场景 1.如果一个系统里有很多类,他们只是某个行
为不同时,使用策略模式可以让一个对象在许多 行为中选择一种行为。
2.一个系统需要动态地在几种算法中选择一种。 3.有多重转移条件语句考虑使用策略模式。
软件设计模式 命令模式 & 策略模式
目录 Contents
1 命令模式 2 策略模式 3 关键技术与实践难点 4 研究成果与应用 5 相关建议与论文总结
命令模式
命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令 的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的 一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么 被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。