使用观察者模式进行订单管理

使用观察者模式进行订单管理

概念:观察者模式是由发送者和观察者构成,发送者在状态改变时,主动通知所有的观察者做相应的刷新。
观察者模式定义了对象之间一对多的依赖关系,以便一个对象状态发生改变时,所有依赖于它的对象都能够得到通知,并自动刷新。

/**
 * author: Alan on 2017/12/14 15:34
 * address: [email protected]
 * description: 订单管理观察者 用户对订单做了操作后,通知所有注册观察者的对象作相应的改变
 */
class OrderManageObserver {

    companion object {
        var list: MutableList? = null
        var instance: OrderManageObserver? = null
            get() {
                if (field == null) {
                    // 使用双重锁方式实现单例,保持只有一个实例
                    synchronized(OrderManageObserver::class.java) {
                        if (field == null){
                            list = ArrayList()
                            field = OrderManageObserver()
                        }
                    }
                }
                return field
            }
    }

    /**
     * 接受订单
     */
    fun orderReceivingClick(orderStep: Int?) {
        list?.forEach {
            // 通知所有观察者
            it.orderReceiving(orderStep)
        }
    }

    /**
     * 订单删除
     */
    fun orderDeleteClick(orderStep: Int?) {
        list?.forEach {
            // 通知所有观察者
            it.orderDelete(orderStep)
        }
    }

    /**
     * 注册订单监听
     */
    fun setOrderClick(orderFace: OrderManageListener) {
        list?.add(orderFace)
    }
}

订单管理监听器

/**
 * author: Alan on 2018/1/6 14:01
 * address: [email protected]
 * description: 订单管理监听器
 */
interface OrderManageListener {
    fun orderReceiving(orderStep: Int?) // 接受订单
    fun orderDelete(orderStep: Int?) // 订单删除
}

注册观察者

OrderManageObserver.instance?.setOrderClick(object : OrderManageListener {
            override fun orderReceiving(orderStep: Int?) {
             // 在这里做相应操作
            }

            override fun orderDelete(orderStep: Int?) {
               // 订单删除, 刷新列表
            }
        })

发送者

override fun orderDelSuccess(orderStep: Int?) {
        // 在订单删除成功后,通知所有的观察者做相应的操作
        OrderManageObserver.instance?.orderDeleteClick(orderStep)
    }

总结:观察者模式看起来很高大上,其实说白了就是一个类维护了另一个类的一个集合,并通过这个集合绑定解绑或调用另一个类的方法,对程序的解耦有一定帮助。在这里,我只简单的实现了一下,如果项目比较大,且用的地方比较多的话,在设计底层框架的时候,可以利用多态的特性进行抽象,以便适用与各种场景。

你可能感兴趣的:(Android学习)