自定义带计数器队列

作者: 蓝不蓝编程 | 来源:发表于2019-12-12 17:37 被阅读0次

    背景

    产品需要在一个界面显示之前弹出两种不同类型的弹框,后期又希望每种弹框显示一定的次数后才不再出现.如先显示1次A弹框,再显示2次B弹框.
    第1次进入X界面,出现A弹框;
    第2次进入X界面,出现B弹框;
    第3次进入X界面,出现B弹框;

    分析

    如果直接在X界面里写这些逻辑,会导致X界面代码复杂化,弹框和X界面耦合严重,需要采用一种设计方式,让代码隔离,并且便于后期扩展,如又增加一种弹框怎么办?

    解决方案

    自定义带计数器队列.
    初始化后队列成员: A(1) B(2)
    第1次进入X界面,出现A弹框,队列成员变成:B(2);
    第2次进入X界面,出现B弹框,队列成员变成:B(1);
    第3次进入X界面,出现B弹框,队列清空.

    主要代码

    import java.util.LinkedList
    
    class CountQueue<T> {
        private val queue = LinkedList<CountQueueItem<T>>()
    
        fun add(item: T, count: Int) {
            if (count > 0) {
                queue.add(CountQueueItem(item, count))
            }
        }
    
        fun next(): T? {
            val countQueueItem = queue.peek()
            return if (countQueueItem != null) {
                if (countQueueItem.count <= 1) {
                    queue.remove(countQueueItem)
                }
                countQueueItem.reduceCount()
                countQueueItem.item
            } else {
                null
            }
        }
    }
    
    class CountQueueItem<T> {
        var item: T? = null
        var count: Int = 0
    
        constructor(item: T) {
            CountQueueItem(item, 1)
        }
    
        constructor(item: T, count: Int) {
            this.item = item
            this.count = count
        }
    
        fun reduceCount() {
            count--
        }
    }
    

    完整代码

    https://gitee.com/cxyzy1/queue_with_counter

    相关文章

      网友评论

        本文标题:自定义带计数器队列

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