• java实现23种设计模式之命令模式


    命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。

    请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

    主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

    通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。

    定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口

    package com.ceshi17;
    
    public class Receiver {
        public void action(){
            System.out.println("接受命令!");
        }
    }
    package com.ceshi17;
    
    public interface Command {
        public void exe();
    }
    package com.ceshi17;
    
    public class Invoker {
        private Command command;
        
        public Invoker(Command command) {
            this.command = command;
        }
    
        public void action(){
            command.exe();
        }
    }
    package com.ceshi17;
    
    public class MyCommand implements Command {
    
        private Receiver receiver;
        
        public MyCommand(Receiver receiver) {
            this.receiver = receiver;
        }
        
        @Override
        public void exe() {
            receiver.action();
        }
    
    }
    package com.ceshi17;
    
    public class Test {
    
        public static void main(String[] args) {
            Receiver receiver = new Receiver();
            Command cmd = new MyCommand(receiver);
            Invoker invoker = new Invoker(cmd);
            invoker.action();
        }
    }

    运行结果:

    首先必须要有一个命令的执行对象,该对象的行为是输出接受命令。

    如果你要直接执行receiver.action();就没有然后了。

    为了降低耦合度,需要将该对象的行为由其他对象处理。

    命令类(command)必须要实现接口的执行方法。而执行方法调用的就是receiver.action();

    这个执行要由调用者(invoker)来执行。

    invoker的行为方法(action)就是调用command的exe()方法。

    这样就降低了耦合度。如果需要添加其他命令,只需要实现命令接口就行了。

    主要是将命令的发出者和执行者之间解耦,实现请求和执行分开,

    struts 中的 action 核心控制器 ActionServlet 只有一个,相当于 Invoker,而模型层的类会随着不同的应用有不同的模型类,相当于具体的 Command。

  • 相关阅读:
    windows server 2012 如何开启 hyper-v 并创建虚拟机
    ABP框架系列之二十四:(Email-Sending-EF-电子邮件发送)
    ABP框架系列之二十三:(EF-MySql-Integration-EF-MySql-集成)
    ABP框架系列之二十二:(Dynamic-Web-API-动态WebApi)
    ABP框架系列之二十一:(Domain-Services-领域服务)
    ABP框架系列之二十:(Dependency-Injection-依赖注入)
    ABP框架系列之十九:(Debugging-调试)
    ABP框架系列之十八:(Data-Transfer-Objects-数据转换对象)
    ABP框架系列之十七:(Data-Filters-数据过滤)
    ABP框架系列之十六:(Dapper-Integration-Dapper集成)
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756622.html
Copyright © 2020-2023  润新知