Android的设计模式-命令模式

来源:互联网 发布:淘宝网机顶盒比价 编辑:程序博客网 时间:2024/06/01 07:48

前言

Android的设计模式系列文章介绍,欢迎关注,持续更新中:

Android的设计模式-设计模式的六大原则
创建型模式:
Android的设计模式-单例模式
Android的设计模式-建造者模式
Android的设计模式-工厂方法模式
Android的设计模式-简单工厂模式
Android的设计模式-抽象工厂模式
Android的设计模式-原型模式
行为型模式:
Android的设计模式-策略模式
Android的设计模式-状态模式
Android的设计模式-责任链模式
Android的设计模式-观察者模式
Android的设计模式-模板方法模式
Android的设计模式-迭代器模式
Android的设计模式-备忘录模式
Android的设计模式-访问者模式
Android的设计模式-中介者模式
Android的设计模式-解释器模式
Android的设计模式-命令模式

1.定义

将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录日志,可以提供命令的撤销和恢复功能。

2.介绍

  • 命令模式属于行为型模式。
  • 我们遇到最常见的命令模式就是关机操作了,我们只需点击一下关机按钮就可以了,至于计算机是如何关机的,我们不需要关心其实现细节。

3.UML类图

命令模式UML类图.jpg

角色说明:
  • Command(命令角色):接口或者抽象类,定义要执行的命令。
  • ConcreteCommand(具体命令角色):命令角色的具体实现,通常会持有接收者,并调用接收者来处理命令。
  • Invoker(调用者角色):负责调用命令对象执行请求,通常会持有命令对象(可以持有多个命令对象)。Invoker是Client真正触发命令并要求命令执行相应操作的地方(使用命令对象的入口)。
  • Receiver(接收者角色):是真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
  • Client(客户断角色):Client可以创建具体的命令对象,并且设置命令对象的接收者。

4.实现

就以关机为例子来实现命令模式。

4.1 创建命令角色

定义一个抽象的执行方法:

    public interface Command {        void execute();//执行命令    }
4.2 创建具体命令角色

创建一个关机命令:

    public class ShutdownCommand implements Command {//关机命令        private Receiver receiver;//接受者        public ShutdownCommand(Receiver receiver) {            this.receiver = receiver;        }        @Override        public void execute() {            System.out.println("命令角色执行关机命令");            receiver.action();//调用接受者        }    }
4.3 创建调用者角色
     public class Invoker {//调用者        private Command command;        public Invoker(Command command) {            this.command = command;        }        public void action() {            System.out.println("调用者执行命令");            command.execute();        }    }
4.4 创建接收者角色

执行具体的关机操作:

    public class Receiver {        public void action() {//接收者执行具体的操作            System.out.println("接收者执行具体的操作");            System.out.println("开始执行关机操作:");            System.out.println("退出所有程序进程");            System.out.println("关机~");        }    }
4.5 客户端测试:
     public void test() {        Receiver receiver = new Receiver();//创建命令接收者        Command command = new ShutdownCommand(receiver);//创建一个命令的具体实现对象,并指定命令接收者        Invoker invoker = new Invoker(command);//创建一个命令调用者,并指定具体命令        invoker.action();//发起调用命令请求    }
输出结果:
调用者执行命令命令角色执行关机命令接收者执行具体的操作开始执行关机操作:退出所有程序进程关机~
4.6 说明:
  • 命令模式同时也支持命令的撤销(Undo)操作和恢复(Redo)操作,比如我们平时关机时,也是可以撤销关机的。至于恢复操作,需要我们记下执行过的命令,在需要的时候重新执行一遍。

5. 应用场景

  • 需要对行为进行记录,撤销,重做,事务处理时。
  • 对于大多数请求——响应模式的功能,比较适合使用命令模式。

6. 优点

  • 调用者与接受者之间的解藕。
  • 易于扩展,扩展命令只需新增具体命令类即可,符合开放封闭原则。

7. 缺点

  • 过多的命令会造成过多的类,

8. Android中的源码分析

8.1 线程类

实际上Thread的使用就是一个简单的命令模式,先看下Thread的使用:

        new Thread(new Runnable() {            @Override            public void run() {                //doSomeThing            }        }).start();

Threadstart()方法即命令的调用者,同时Thread的内部会调用Runnablerun(),这里Thread又充当了具体的命令角色,最后的Runnable则是接受者了,负责最后的功能处理。

8.2 Handler

另一个比较典型的常用到命令模式就是Handler了,这里就不贴代码了,简单分析下各个类的角色:

  • 接受者:Handler,执行消息的处理操作。
  • 调用者:Looper,调用消息的的处理方法。
  • 命令角色:Message,消息类。

相关文章阅读
Android的设计模式-设计模式的六大原则
创建型模式:
Android的设计模式-单例模式
Android的设计模式-建造者模式
Android的设计模式-工厂方法模式
Android的设计模式-简单工厂模式
Android的设计模式-抽象工厂模式
Android的设计模式-原型模式
行为型模式:
Android的设计模式-策略模式
Android的设计模式-状态模式
Android的设计模式-责任链模式
Android的设计模式-观察者模式
Android的设计模式-模板方法模式
Android的设计模式-迭代器模式
Android的设计模式-备忘录模式
Android的设计模式-访问者模式
Android的设计模式-中介者模式
Android的设计模式-解释器模式
Android的设计模式-命令模式

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红色挂件 毛绒小挂件 铜挂锁 防水挂锁 安全挂锁 不锈钢挂锁 挂锁价格 密码挂锁 笔记本挂锁 环工挂锁 防盗挂锁 地球挂锁 三环挂锁 智能挂锁 挂锁 开锁 开锁挂锁 挂锁打不开 挂锁搭扣 挂锁子 挂锁牌子 挂锁分类 挂锁的型号 挂锁结构 挂锁开锁技巧 普通挂锁开锁技巧动图 简单成功挂锁开锁技巧 挂锁品牌排行 金点原子挂锁 金点原子锁挂锁 挂锁怎么撬开 挂锁打不开怎么办 挂锁开锁技巧图解 不锈钢挂锁厂家 304不锈钢挂锁 挂锁怎么打开 挂锁开锁原理图解 普通挂锁开锁技巧 鼎灿电动工具 箱扣 挂锡 煮挂面