美文网首页收藏设计模式
Android设计模式:命令模式

Android设计模式:命令模式

作者: 搬码人 | 来源:发表于2022-01-18 18:06 被阅读0次

命令模式

简介:通过command抽象命令类,将不符合抽象编程的handler,转为抽象编程。

背景

购物商城的应用首页模块有不同的榜单推送,而不同的榜单的结构又各式各样,也就是说没有统一的接口。直接请求的依赖性太强,Handler类的改变,需要修改ListView


image.png

设计实现

1、执行对象Handler没有抽象接口,ListView直接使用Handler耦合性太大。
2、增加一个Command层,抽象出一个Command接口,由子类包括Handler实体。
3、ListView对Command接口编程,选择调用command子类,从而调用不同的请求。


命令模式

代码实例

/**
 *@Description
 *@Author PC
 *@QQ 1578684787
 */
class HotHandler {
    fun getHots():String{
        println("返回热门商品列表")
        return "热门商品列表"
    }
}
class NewerHandler {
    fun getNews():String{
        println("返回最新商品列表")
        return "最新商品列表"
    }
}
class DiscountHandler {
    fun getDiscounts():String{
        println("返回优惠商品列表")
        return "优惠商品列表"
    }

}
abstract class Command {
    abstract fun execute():String
}
class HotCommand:Command() {
    private val handler = HotHandler()
    override fun execute(): String {
        return handler.getHots()
    }
}
class DiscountCommand:Command() {
    private val handler = DiscountHandler()
    override fun execute(): String {
        return handler.getDiscounts()
    }
}
class NewerCommand:Command() {
    private val handler = NewerHandler()
    override fun execute(): String {
        return handler.getNews()
    }
}
class ListView {
    //为功能键注入命令
    lateinit var command:Command
    //请求列表
    fun getList(){
        println("首页请求")
        val result = command.execute()
        println("当前列表${result}")
    }
}

测试

class CommandClient {
    companion object{
        @JvmStatic
        fun main(args: Array<String>) {
            val command1 = HotCommand()
            val command2 = DiscountCommand()
            val command3 = NewerCommand()
            val listView = ListView().apply {
                this.command = command3
                this.getList()
            }
        }
    }
}

测试结果


image.png
image.png

应用场景

1、需要对行为进行记录、撤销、重做、事务处理时。
2、对于大多数请求——响应模式的功能,比较适合使用命令模式。
在Android中的应用:实际上Thread的使用就是简单的命令模式。

优点

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

缺点

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

相关文章

  • Android 命令模式

    Android 设计模式系列文章 Android 23种设计模式 前言 命令模式,多被用于程序菜单命令。比如遥控器...

  • Android 设计模式之简单工厂模式

    设计模式系列文章 Android 设计模式之单例模式 Android 设计模式之Builder模式 Android...

  • 【设计模式Android】中介者模式

    设计模式Android 其他相关文章:【设计模式Android】设计模式六大原则【设计模式Android】代理模式...

  • 设计模式详解——适配器模式

    本篇文章介绍一种设计模式——命令模式。本篇文章内容参考《JAVA与模式》之适配器模式,Android设计模式源码解...

  • Android设计模式-命令模式

    UML关系简单介绍UML简单使用的介绍创建型设计模式Android设计模式-单例模式Android设计模式-工厂模...

  • Android 设计模式 - 命令模式

    命令模式:将一个请求封装为一个对象,从而使我们可以用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支...

  • Android设计模式:命令模式

    命令模式 简介:通过command抽象命令类,将不符合抽象编程的handler,转为抽象编程。 背景 购物商城的应...

  • Android 外观模式

    Android 设计模式系列文章 Android 23种设计模式 一、前言 Android 外观模式(Facade...

  • 设计模式

    Android开发中常见的设计模式Java设计模式:23种设计模式全面解析(超级详细)Android的设计模式-设...

  • Android中的设计模式之命令模式

    参考 《设计模式:可复用面向对象软件的基础 》5.2 Command 命令 对象行为型模式 《Android源码设...

网友评论

    本文标题:Android设计模式:命令模式

    本文链接:https://www.haomeiwen.com/subject/vjrkhrtx.html