zoukankan      html  css  js  c++  java
  • 【设计模式】行为型06命令模式(Command Pattern)

    命令模式

        个人理解:命令模式,本质上是一种多层次的封装。

        好处:降低耦合,扩展极其方便。

        以下一段文案摘抄自:http://www.runoob.com/design-pattern/command-pattern.html个人有些难以深入理解,待日后细细体会:

        意图:命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开。

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

        何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。

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

        博主参考了网上很多例子,去掉了一些冗余功能,精简了demo使其更加便于理解,如下:

        类图(晚上画):

        代码:

        1、实际的请求类,拥有所有的具体功能:

    package com.pat.command;
    
    
    /**
     * 请求类-具体被操作
     * @author ZX
     */
    public class Receiver{
    
    	public void takeOff() {
    		System.out.println("起飞功能");
    	}
    	public void land() {
    		System.out.println("降落功能");
    	}
    	
    }

    2、命令的封装:

    package com.pat.command;
    /**
     * 命令类,所有的命令
     * @author ZX
     *
     */
    public abstract class Command {
    	public abstract void execute();
    }
    /**
     * 命令A
     * @author Administrator
     *
     */
    class CommandA extends Command{
        Receiver receiver;
    	@Override
    	public void execute() {
    		receiver.takeOff();
    		
    	}
    	public CommandA(Receiver receiver) {
    		this.receiver=receiver;
    	}
    }
    /**
     * 命令B
     * @author Administrator
     *
     */
    class CommandB extends Command{
        Receiver receiver;
    	@Override
    	public void execute() {
    		receiver.land();
    		
    	}
    	public CommandB(Receiver receiver) {
    		this.receiver=receiver;
    	}
    }

    3、控制中心:

    package com.pat.command;
    /**
     * 指挥中心
     * @author ZX
     *
     */
    public class CommandCenter {
    	private Command command;
    	public CommandCenter(Command command) {
    		this.command=command;
    	}
    	public void call() {
    		command.execute();
    	}
    }
    

    4、测试类:

    package com.pat.command;
    
    public class Test {
    	public static void main(String[] args) {
    		//指挥中心执行A命令
    		CommandCenter APlan = new CommandCenter(new CommandA(new Receiver()));
    		APlan.call();
    		//指挥中心执行B命令
    		CommandCenter BPlan= new CommandCenter(new CommandB(new Receiver()));
    		BPlan.call();
    	}
    }
    

    5、结果:

    起飞功能
    降落功能
  • 相关阅读:
    极速南瓜(北京)品牌管理顾问有限公司
    许涛芳_百度百科
    个性化品牌开始繁荣?为设计师和代工厂牵线的平台Maker's Row获得100万美元融资 | 36氪
    薛蟠_百度百科
    莫龙丹_百度百科
    尊履·尚品|手工鞋|固特异|定制鞋
    联系我们_你我想法_【有男度】UNANDU 100%进口 全球设计师品牌精汇 男装_男装搭配_时尚男装_品牌男装_男装搭配技巧_男装网站
    全球高级定制鞋完全指南
    百年定制老字号落户扬城 服装“私人定制”悄然兴起
    享受私人定制服装(下)
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054147.html
Copyright © 2011-2022 走看看