zoukankan      html  css  js  c++  java
  • 行为型模式-命令模式

    1.定义

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

    2.介绍

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

    3.UML类图

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

    4.实现

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

    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,消息类。
  • 相关阅读:
    [转]敏捷软件开发 需求分析
    Windows服务控制命令SC
    [转]敏捷测试工程师的十条法则
    大道至简:如何准确把握趋势 一
    Sqlserver xml 类型操作
    微软Teched2010大会一日游记
    [转]任务、用例、用户故事和场景
    ASUS TF600T上手体验
    Windows 8的各种小发现——不断更新中
    Surface Pro电磁笔故障
  • 原文地址:https://www.cnblogs.com/suiyilaile/p/10143834.html
Copyright © 2011-2022 走看看