Command
命令模式是一种对象行为型模
式,它主要解决的问题是:在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题。如下图:
有时我们必须向某对象提交请求,但并不知道关于被请求的操作或请求的接受者的任何信息,此时无法抵
御变化的紧耦合是不合适的。如:需要对行为进行“记录、撤销
/
重做、事务”等处理。我们所要做的是将依赖关系转化,将紧耦合变为松耦合。则上图的形式转化为如下形
式:
Command
模式通
过将请求本身变成一个对象来使行为请求者可向未指定的应用对象提出请求。
GoF
《设计模式》中
说道:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
Command
命令模式结构:
command 模式 就是 client去 调用invoker,invoker去调用command,command去调用receiver,然后receiver在client显示。
我在RCP项目中,要实现一个命令,并且有它的undo,redo功能。
比如我在一个数据操作类里,写上
public void editFormalParam(Client tab, Parameter pParam) {
EditParamCommand cmd = new EditParamCommand(model);
........................................
final EditParamCommand pCmd = cmd;
SafeAction safeAction = new SafeAction(BuildingblockeditorPluginResources.SACFACTION.toString()) {
public void runSafe() {
getCommandStack().execute(pCmd);
}
};
safeAction.run();
}
这时候client要执行editFormalParam方法, 就会去执行 command里的execute方法。
这个数据操作类就是一个invoker,它去执行command里的execute方法。
我们同时在command类里实现了
public class EditParamCommand {
private Model model;
private Object new;
private Object old;
public EditorParamCommand(Model model,Object new,Object old){
this.model=model;
this.new=new;
this.old=old;
}
public void execute(){
model.get...;
mode.set...;
}
public void redo(){
model.set(new);
}
public void undo(){
model.set(old);
}
}
这里的model就是receiver.
然后把model变化后的数据返回client,刷新。
分享到:
相关推荐
在Command模式中,主要包含以下角色: - **Invoker(调用者)**:持有命令对象,并执行命令。 - **Command(抽象命令)**:定义了所有命令都应具有的接口,通常包含execute()和undo()方法。 - **ConcreteCommand...
在命令模式中,主要包含以下几个组成部分: - **Command(命令)接口**:定义了所有命令对象都需要实现的基本方法,通常是`execute()`方法。 - **ConcreteCommand(具体命令)类**:实现了命令接口,并持有接收者的...
然而,在MVVM中,我们常常遇到一个问题:并非所有的控件都内置了`Command`属性,这使得像按钮(Button)那样能够方便地通过`Command`绑定到ViewModel中的命令方法。为了处理这种情况,我们需要一些技巧来实现无`...
本资源包“CommandWPF”提供了若干个关于WPF中Command实际应用的例子,帮助开发者更好地理解和掌握这一功能。 首先,让我们了解什么是`ICommand`接口。`ICommand`是WPF中定义的基本命令接口,它定义了两个方法:`...
`RelayCommand` 是MVVM(Model-View-ViewModel)模式中常用的命令实现,由Josh Smith首次提出,它是对`ICommand`接口的简单实现,允许将任何具有适当签名的方法用作命令的执行逻辑。而`System.Windows.Controls....
这些模式来自于经验丰富的开发者们在实际项目中遇到的问题及其解决方案,并被广泛接受和使用。设计模式并不是具体的代码或库,而是一种描述在某些特定上下文中如何进行设计决策的方法论。了解并熟练运用设计模式,能...
它通过Message-Driven Bean来处理这些请求,解决了Session Facade模式中客户端等待时间长和系统可靠性低的问题。然而,Message-Driven Bean没有直接返回值,结果通知需通过其他机制,且异常处理较为复杂。 3. **EJB...
设计模式是软件工程中的一种最佳实践,用于解决在开发过程中经常遇到的问题,提供了一套可复用的解决方案。这些模式都是经验丰富的软件开发者们在实际工作中总结出来的,并被广泛接受和应用。本压缩包文件“Design...
6. **Command模式**:Command模式属于行为设计模式,它将请求封装为一个对象,使得可以使用不同的请求、队列请求、记录请求日志以及支持可撤销的操作。 7. **Mediator模式**:Mediator模式是一种行为设计模式,定义...
通过示例代码,你可以看到如何在实际Java项目中应用这些模式,从而提升代码质量。同时,这些资料也可能涵盖了一些设计原则,比如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)和...
行为型模式包括模板方法模式(Template Method)、观察者模式(Observer)、策略模式(Strategy)、命令模式(Command)、迭代器模式(Iterator)、中介者模式(Mediator)和访问者模式(Visitor)等。 书中每种...
1. **模式的应用场景**:理解每个设计模式最适合解决的问题,以及在实际项目中何时、如何使用。 2. **模式的实现**:学习如何在Java代码中实现各种设计模式,包括类图和对象图的绘制,以及相应的代码结构。 3. **...
在命令模式中,发送者和接收者之间的耦合被解除,发送请求的对象仅需知道如何发送请求而无需关心如何处理请求。 #### 模式结构 命令模式主要涉及以下几种角色: 1. **Command**(抽象命令类):声明了一个执行操作...
设计模式是软件工程中的一种最佳实践,用于解决在开发过程中经常遇到的问题,提供了一种标准的解决方案。在Java编程中,设计模式的应用广泛且至关重要,能够提高代码的可读性、可维护性和可扩展性。这里我们将深入...
3. **行为型模式**:这一类模式关注对象之间的职责分配和交互,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、责任链模式...
例如责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...
- **3.7 Command模式**:命令模式将一个请求封装为一个对象,从而使用户可以用不同的请求来参数化客户端。 - **3.8 Visitor模式**:访问者模式定义一个作用于某对象结构中的各元素的操作。 - **3.9 Chain of ...
设计模式是软件工程中的一种最佳实践,用于解决在开发过程中经常遇到的问题,提供了一套可重用的解决方案。这份名为“设计模式PPT——25种设计模式详解”的资料,显然是一个深入探讨设计模式的教程,它通过PDF格式对...
这本书的核心理念是将实践中证明有效的解决方案——设计模式——以规范化的形式呈现出来,供开发者在遇到类似问题时参考和借鉴。设计模式是软件开发中的一种通用语言,它们代表了在特定情境下解决特定问题的最佳实践...