设计模式系列之--命令模式

命令模式

这种设计模式属于行为型的设计模式,他解决了方法的合理调用
命令模式和外观模式 很像都是通过一个类来进行管理
不同: 外观模式是管理类的角度 命令模式是管理方法角度 而且外观模式的模式种类很固定
命令模式的优缺点 :
优点: 解耦效果很好
缺点 : 当指令过多造成内存占用大
命令模式通过 一个Master来发起命令 -> 给命令类 -> 找接受者接受
命令类中决定了接受者如何被调用
命令类和接受者之间类似适配器模式 看似是命令类执行的命令 其实是接受者执行的命令
不让Master直接调用接受者的好处是 Maser可以将调用命令封装(这里类似外观模式) 将命令代表的一组执行者要执行的操作交给命令类去负责 这样master就不必关系具体细节
master可以下达不同的命令来执行不同的操作

以Master调用receive为例

//命令抽象类
public interface Command {
    public void execute();

    public void cancle();
}
//命令实现类
ublic class CommandModel1 implements Command {

    //将接受者叫过来执行命令 这里只有一个接受者就直接new了
    CommandRecevier commandRecevier = new CommandRecevier();

    @Override
    public void execute() {
        System.out.println("模式一启动");
        commandRecevier.doCommand1();
        commandRecevier.doCommand2();
        commandRecevier.doCommand3();
        System.out.println("模式一执行完毕");
    }

    @Override
    public void cancle() {
        System.out.println("模式一撤销");
        commandRecevier.undoCommand();
    }
}

public class CommandModel2 implements Command {

    CommandRecevier commandRecevier = new CommandRecevier();
	//这里有点像指挥者指定流程
    @Override
    public void execute() {
        System.out.println("模式二启动");
        commandRecevier.doCommand1();
        commandRecevier.doCommand3();
        commandRecevier.doCommand2();
        System.out.println("模式二执行完成");
    }

    @Override
    public void cancle() {
        commandRecevier.undoCommand();
    }
}
//接受者来执行具体命令
//接受者可以执行的命令
public class CommandRecevier {
    public void doCommand1(){
        System.out.println("执行命令1");
    }
    public void doCommand2(){
        System.out.println("执行命令2");
    }
    public void doCommand3(){
        System.out.println("执行命令3");
    }
    public void undoCommand(){
        System.out.println("撤销命令");
    }
}
public class User {
   //用户调用
    public static void main(String[] args) {
        CommandMaster commandMaster = new CommandMaster();
        commandMaster.setDoCommand(new CommandModel1());
        commandMaster.setDoCommand(new CommandModel2());
        commandMaster.cancel();
        commandMaster.doAllCommand();
        commandMaster.cancel();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值