Java设计模式笔记之命令模式

1.前言

命令模式(Command Pattern),是行为型设计模式之一,相比其他模式显得灵活许多。命令模式,将一系列的方法调用封装,用户只需要调用一个方法执行,那么所有这些被封装的方法就会挨个被执行调用。

2.定义

将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。

3.UML图



Receiver:接收者角色;具体实施或执行一个请求,执行具体逻辑的角色,接收者类中封装具体逻辑操作的方法称为行动方法。

Command:命令角色;定义所有具体命令类的抽象类接口。

ConcreteCommand:具体命令角色;实现了上面的Command接口。

Invoker:请求者角色;调用命令对象执行具体的请求。


通用模式代码:

/**
*
* 接受者类
*/
public class Receiver{
	
	/**
	* 真正执行具体命令逻辑的方法
	*/
	public void action(){
		
	}
}


   /**
     * 抽象命令接口
     */
    public interface Command{
        /**
         * 执行具体操作的命令
         */
        void execute();
    }

    /**
     * 具体命令类
     */
    public class ConcreteCommand implements Command{
        private Receiver receiver;//持有一个对接收者对象的引用

        public ConcreteCommand(Receiver receiver){
            this.receiver = receiver;
        }

        @Override
        public void execute() {
            receiver.action();//调用接收者的相关方法来执行具体逻辑
        }
    }

 /**
     * 请求者类
     */
    public class Invoker{
        private Command command;//持有一个对相应命令对象的引用

        public Invoker(Command command){
            this.command = command;
        }

        public void action(){
            //调用具体命令对象的相关方法,执行具体命令
            command.execute();
        }
    }

    /**
     * 客户类
     */
    public class Client{
        public static void main(String[] args){
            //构造一个接收者对象
            Receiver receiver = new Receiver();
            //根据接收者对象构造一个命令对象
            Command command = new ConcreteCommand(receiver);
            //根据具体的对象构造请求对象
            Invoker invoker = new Invoker(command);
            //执行请求方法
            invoker.action();
        }
    }

命令模式使用一句话来理解记忆就是:将行为调用者与实现者解耦。


命令模式的弊端:

与其他多数设计模式一样,命令模式也体现了类的膨胀这一毛病,这些都是为了实现更弱的耦合性,更灵活的控制性以及更好的扩展性。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值