美文网首页收藏设计模式
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设计模式:命令模式

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