Android设计模式:命令模式

命令模式

简介:通过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的使用就是简单的命令模式。

优点

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

缺点

  • 过多的命令会造成过多的类。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容