GOF23设计模式之命令模式(Command)的理解与实现



命令模式Command

     命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排毒或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式,事务Transaction模式

 

结构:

     Command抽象命令类

     ConcreteCommand具体命令类

     Invoker调用者/请求者

         请求的发送者,它通过命令对象来执行请求,一个调用者并不需要在设计时确定其接收者。因此它至于抽象命令类之间存在惯量。在程序运行时,将调用命令对象的execute(),间接调用接收者的相关操作。

     Receiver接收者:

         接收者执行与请求相关的操作,具体实现对请求的业务处理

         未抽象前,实际执行操作内容的对象。

     Client客户类。

         在客户类中需要创建调用者对象,具体命令类对象,在创建具体命令对象时指定对应的接收者。

发送者和接收者之间没有直接关系,都通过命令对象间接调用。

场景:

         Struts2中,action的整个调用过程中就有命令模式

         数据库事务机制的底层实现

         命令的撤销和回复。

 
================================================
/**
 * 命令的真实执行者。
 * 时间:2015年4月14日19:32:27
 *
 */
package com.bjsxt.cn.command;
import java.rmi.activation.ActivationGroupDesc.CommandEnvironment;
public class Receiver {
 
 
 public void action() {
  System.out.println("我作为接收者,是实际的命令执行者。");
  System.out.println("Receiver.action()");
 }
 
}
===========================================
/**
 * 抽象命令类
 */
package com.bjsxt.cn.command;
/**
 * 这个方法是一个返回结果为空的方法
 * 实际项目中,可根据需求设计多个不同的方法。
 * @author wanna_000
 *
 */
public interface Command {
 public void execute();
}
class ConcreteCommand implements Command {
 private Receiver receiver;
 
 
 public ConcreteCommand(Receiver receiver) {
  super();
  this.receiver = receiver;
 }
 @Override
 public void execute() {
  //在调用前后做一些我需要的处理
  receiver.action();
 
 }
 
}
==============================================
/**
 * 调用者/发起者
 */
package com.bjsxt.cn.command;
public class Invoker {
 //也可以通过List<Command>容纳很多命令,进行批处理,数据库底层的事务管理就是这种模式。
 private Command command;
 public Invoker(Command command) {
  super();
  this.command = command;
 }
 //业务方法,用于调用命令类的方法
 public void call() {
  command.execute();
 }
}
================================================
/**
 * 客户程序类:测试命令模式的使用 
 */
package com.bjsxt.cn.command;
public class Client {
 public static void main(String[] args) {
  Receiver receiver = new Receiver();
  Command command = new ConcreteCommand(receiver);
  Invoker invoker = new Invoker(command);
  invoker.call();
 }
}

/*
我作为接收者,是实际的命令执行者。
Receiver.action()
 *
 */









				
时间: 2024-08-23 06:45:24

GOF23设计模式之命令模式(Command)的理解与实现的相关文章

设计模式 ( 十三 ) 命令模式Command(对象行为型)

设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活. 例子1:电视机遥控器 : 遥控器是请求的发送者,电视机是请求的接收者,遥控器上有一些按钮如开,关,换频道等按钮就是具体命令,不同的按钮对应电视机的不同操作. 2.问题

设计模式之命令模式(Command)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象.创建型模式有两个不断出现的主旋律. 第一,它们都将关于该系统使用哪些详细的类的信息封装起来.第二.它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口. 因此.创建型模式在什么被创建.谁创建它,它是怎样被创建

【GOF23设计模式】命令模式

来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_命令模式.数据库事务机制底层架构实现.撤销和回复 1 package com.test.command; 2 3 public class Receiver { 4 public void action(){ 5 System.out.println("Receiver.action()"); 6 } 7 } 1 package com.test.command; 2 3 public interface C

设计模式之命令模式---Command Pattern

模式的定义 命令模式是一个高内聚的模式,定义如下: Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录日志,可以提供命令的撤销和恢复功能. 模式的使用场景 只要

大熊君说说JS与设计模式之------命令模式Command

一,总体概要 1,笔者浅谈 日常生活中,我们在看电视的时候,通过遥控器选择我们喜欢的频道时,此时我们就是客户端的角色,遥控器的按钮相当于客户请求,而具体执行的对象就是命令对象, 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 先给个具体事例,如下: 1 function add(x, y) { return x + y; } ; 2 function sub(x, y) { return x -

设计模式 笔记 命令模式 Command

//---------------------------15/04/25---------------------------- //Conmmand  命令模式----对象行为型模式 /* 1:意图: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志, 以及支持可撤销的操作. 2:别名: Action,Transaction(事务) 3:动机: 4:适用性: 1>抽象出待执行的动作以参数化某对象.可以使用回调函数表达这种参数化机制. 也就是说,Con

浅谈JAVA设计模式之——命令模式(Command)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45569323 一.概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 二.适用性 1.抽象出待执行的动作以参数化某对象. 2.在不同的时刻指定.排列和执行请求. 3.支持取消操作. 4.支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍. 5.用构建在原语操作上的高层操作构造一个系统. 三.参与者 1.Co

设计模式之命令模式 Command

介绍 角色 使用场景 代码实现 public interface Command { //这个方法是一个返回结果为空的方法 //实际项目中,可以根据需求设计多个不同的方法 void execute(); } 抽象命令接口 class ConcreteCommand implements Command{ private Receiver receiver; //命令的真正执行者 public ConcreteCommand(Receiver receiver) { super(); this.r

C#设计模式(15)——命令模式(Command Pattern)

原文:C#设计模式(15)--命令模式(Command Pattern) 一.前言 之前一直在忙于工作上的事情,关于设计模式系列一直没更新,最近项目中发现,对于设计模式的了解是必不可少的,当然对于设计模式的应用那更是重要,可以说是否懂得应用设计模式在项目中是衡量一个程序员的技术水平,因为对于一个功能的实现,高级工程师和初级工程师一样都会实现,但是区别在于它们实现功能的可扩展和可维护性,也就是代码的是否“优美”.可读.但是,要更好地应用,首先就必须了解各种设计模式和其应用场景,所以我还是希望继续完