- 浏览: 72368 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
z169351998:
...
StringOfArray in web service proxy -
z169351998:
撒大大 [size=x-small][/size]
StringOfArray in web service proxy -
z169351998:
引用[url][/url][flash=200,2 ...
StringOfArray in web service proxy -
huhu_long:
补充1:在二叉树遍历的时候,如果采取非递归的方式,则可以借助S ...
栈的一些应用 -
huhu_long:
简单说,取第一个作为参考pivot值,while(low< ...
快速排序
顾名思义, 命令模式就是给不同的命令然后交给别人做就可以了。
下面我们以 项目经理 下发命令给 漂亮的 女秘书 以及 TechLead 为例来介绍。
先看看命令的接受者
定义两个接收者: 女秘书 + TechLead
再来看看Command
定义两个具体的命令, 一个给秘书, 一个给TechLead
最后来定义同一的Invoker
好啦, 一切都好了, 看看客户端代码是怎样下达命令的:
执行结果:
但是有个问题:
如果我想在某个具体的Receiver中加入一些特有的方法, 比如女秘书, 你懂的。。。
那么在BookAirTicket类里面就只能
但这样又对Secretary有依赖了。。。怎样处理这种情况呢?
下面我们以 项目经理 下发命令给 漂亮的 女秘书 以及 TechLead 为例来介绍。
先看看命令的接受者
public abstract class Receiver { // 接到命令肯定需要先分析分析 public abstract void analyze(); // 分析好了就可以执行 public abstract void execute(); // 执行完了再汇报一下 public abstract void report(); }
定义两个接收者: 女秘书 + TechLead
public class Secretary extends Receiver { @Override public void analyze() { System.out.println("经理去见客户,晚上的飞机, 我的联系一下航空公司"); } @Override public void execute() { System.out.println("打电话订票"); } @Override public void report() { System.out.println("通知经理票已经订好了,晚上8点"); } } public class TechLead extends Receiver { @Override public void analyze() { System.out.println("分析一下新的需求"); } @Override public void execute() { System.out.println("召集项目组开会讨论, 制定计划, 马上执行"); } @Override public void report() { System.out.println("向项目经理汇报当前进展, everything is fine."); } }
再来看看Command
public abstract class Command { protected Receiver receiver; public Command(Receiver receiver){ this.receiver = receiver; } public abstract void execute(); }
定义两个具体的命令, 一个给秘书, 一个给TechLead
public class BookAirTicket extends Command { public BookAirTicket(Receiver receiver) { super(receiver); } @Override public void execute() { super.receiver.analyze(); super.receiver.execute(); super.receiver.report(); // 除了这三部, 可能还要调 财务系统进行报销, 等等 } } public class ChangeRequirement extends Command { public ChangeRequirement(Receiver receiver) { super(receiver); } @Override public void execute() { super.receiver.analyze(); super.receiver.execute(); super.receiver.report(); // 除了这三部, 可能还要根据当前抓状态来调整计划, 等等 } }
最后来定义同一的Invoker
public class Invoker { private Command command; public void setCommand(Command command) { this.command = command; } public void run() { this.command.execute(); } }
好啦, 一切都好了, 看看客户端代码是怎样下达命令的:
public class Client { public static void main(String[] args) { Invoker invoker = new Invoker(); Receiver secretary = new Secretary(); Command bookAirTicket = new BookAirTicket(secretary); invoker.setCommand(bookAirTicket); invoker.run(); System.out.println(); Receiver techLead = new TechLead(); Command changeRequirement = new ChangeRequirement(techLead); invoker.setCommand(changeRequirement); invoker.run(); } }
执行结果:
引用
经理去见客户,晚上的飞机, 我的联系一下航空公司
打电话订票
通知经理票已经订好了,晚上8点
分析一下新的需求
召集项目组开会讨论, 制定计划, 马上执行
向项目经理汇报当前进展, everything is fine.
打电话订票
通知经理票已经订好了,晚上8点
分析一下新的需求
召集项目组开会讨论, 制定计划, 马上执行
向项目经理汇报当前进展, everything is fine.
但是有个问题:
如果我想在某个具体的Receiver中加入一些特有的方法, 比如女秘书, 你懂的。。。
public class Secretary extends Receiver { public void specialService() { System.out.println("秘书嘛, 还应该提供些特殊的服务,你懂得, 嘿嘿~~~"); } }
那么在BookAirTicket类里面就只能
public class BookAirTicket extends Command { public BookAirTicket(Receiver receiver) { super(receiver); } public void execute() { [color=red]Secretary secretary = (Secretary) super.receiver; secretary.analyze(); secretary.execute(); secretary.report(); secretary.specialService();[/color] } }
但这样又对Secretary有依赖了。。。怎样处理这种情况呢?
发表评论
-
备忘录模式
2011-07-01 17:58 710备忘录模式有叫备份模 ... -
门面模式
2011-06-30 10:19 686没看过门面模式(facade)的童鞋也许会好奇门面模式到底是啥 ... -
观察者模式
2011-06-29 15:29 726观察者模式又叫做发布订阅模式。。。 个人感觉这两种叫法代表的 ... -
组合模式
2011-06-27 15:50 677Compose objects into TREE struc ... -
迭代器模式
2011-06-27 12:51 750迭代器模式是为了方便遍历集合而产生, 但现在java提供的迭代 ... -
适配器模式
2011-06-24 17:20 776适配器(Adaptor)是大家日常生活中基本上天天要接触的。 ... -
策略模式
2011-06-24 16:14 721对于不同的需求可能有不同的实现, 但这些实现还不能独立成为什么 ... -
装饰模式
2011-06-24 15:25 896装饰模式, 顾名思义就是在原有基础上进行装饰。 那么“装饰者” ... -
责任链模式
2011-06-24 12:45 1017责任链模式就是将请求和处理分开了, 定义一个责任链, 请求不需 ... -
中介者模式
2011-06-23 17:11 535中介者模式, 主角当然是中介者。那中介者是干什么的呢? 问得好 ... -
原型模式
2011-06-23 11:08 724原型模式的核型就是一个clone方法。 这也没什么好说的。 说 ... -
代理模式 - 动态
2011-06-22 16:20 812接着说代理模式。 动态代理就是让程序在运行是自动去找代理。 ... -
代理模式 - 静态
2011-06-22 15:41 659代理模式有较委托模式, 就是委托人委托代理做什么事情。 代理模 ... -
建造者模式
2011-06-22 13:25 912Builder 模式很重要的两个概念就是导演类和Builder ... -
模板方法模式
2011-06-21 17:41 947模板方法模式比较简单, 其实就是对一些不可变的业务进行封装, ... -
抽象工厂模式
2011-06-21 15:58 771抽象工厂模式是工厂模式的升级版本。适用多系列多产品的场景。 ... -
简单工厂模式
2011-06-21 14:47 795缺点: 不符合开闭原则 工厂类 public class ... -
工厂方法模式
2011-06-21 14:40 827产品由某一具体工厂的同一方法生产, 工厂只需被告知具体产品的类 ... -
开篇语
2011-06-21 14:39 690一直都在不间断的看设计模式, 但看了忘, 忘了又看。。。没有坚 ...
相关推荐
命令模式是一种行为设计模式,它的主要目的是将请求者与接收者解耦,使得请求的发起者无需知道哪个对象会执行这个请求,同时也让系统更容易扩展。这种模式在软件工程中广泛应用,特别是在事件驱动和分布式系统中。 ...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式广泛应用在各种场景中,以提高代码的灵活...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在iOS开发中,命令模式尤其适用于处理事件驱动的编程场景,因为...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于解耦发出命令的对象和执行命令的...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在C#编程中,命令模式常用于实现解耦发送者和接收者,提高代码的...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求以便支持可撤消的操作。在这个简单的计算器例子中,我们将探讨如何使用命令模式来实现加法、...
在“记事本 使用了策略模式和命令模式”这个主题中,我们将深入探讨这两种设计模式以及它们如何应用于记事本软件的实现。 首先,让我们了解策略模式。策略模式是一种行为设计模式,它允许在运行时选择算法或策略。...
命令模式是一种行为设计模式,它将请求封装为一个对象,使得可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在C++中,命令模式的应用可以帮助我们更好地组织代码,提高代码的可扩展性和可维护性。...
命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以参数化不同的请求,对请求排队或记录请求日志,以及支持可撤销的操作。C#作为.NET框架的主要编程语言,非常适合应用这种模式。本篇文章将深入探讨...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java中实现命令模式,我们可以按照以下步骤进行: 1. **定义...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在C#编程中,命令模式常用于实现解耦,使得调用者与执行者之间...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java中,命令模式的应用非常广泛,尤其在需要解耦调用者和接收...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本示例中,我们将深入探讨命令模式的核心概念和实现方式。 ...
命令模式是一种设计模式,它将请求封装为一个对象,从而使我们能使用不同的请求、队列或者日志请求,以及支持可撤销的操作。在本代码demo中,我们将深入探讨这一模式的实现及其应用。 命令模式的核心思想是解耦调用...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本文中,我们将深入探讨命令模式的原理、结构和实际应用,并...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java中,命令模式的应用非常广泛,尤其在需要解耦调用者和执行...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java编程中,命令模式的应用广泛且实用。 命令模式的核心是将...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在C++中,我们可以利用面向对象的特性来有效地实现这个模式。 ...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java中实现命令模式,我们可以创建一个接口或者抽象类作为命令...